Je suis en train d’essayer de faire un morceau de code en php qui me permettrait d’afficher dans un tableau quel champ a la valeur numérique la plus élevée.
Je m’explique :
Le but est de mettre en ligne une liste d’objet à donner, et les copains peuvent venir voir et dire ce qui les interesse et attribuer un certain nombre de point à chaque objet.
Maintenant sur le site il y a donc un tableau avec toutes les infos ci-dessus et une colonne qui doit indiquer la proposition la plus élevée, et c’est la que je bloque :
Je n’arrive pas a comparer les trois champs propose1, 2 ou 3 pour qu’il n’affiche que le plus grand.
Pour l’instant je fais ça [code]:
<?php if ($propose1>$propose2 OR $propose3) : ?>
<?php echo ''.$propose1.' par '.$interesse1.'' ;?>
<?php elseif ($propose2>$propose1 OR $propose3) : ?>
<?php echo ''.$propose2.' par '.$interesse2.'' ;?>
<?php elseif ($propose3>$propose1 OR $propose2) : ?>
<?php echo ''.$propose3.' par '.$interesse3.'' ;?>
<?php
endif; // fin du if qui permet ou non d'executer les commandes html
?>
Toutes les variables sont bien définies en amont.
Ca fonctionne tant qu’il n’y a que deux valeurs, dès que la troisième est définie il affiche d’office la première…
Je pense que la solution est toute bète mais je n’ai pas du partir dans le bon schéma au départ et du coup j’y arrive pas…
Merci de votre aide
PS : Je suis débutant en PHP, merci de votre indulgence et je suis désolé je n’arrive pas a « colorer » le code si dessus :-(edit : a ben si en fait )
Le design de ta bdd n’est pas bon, que se passe t’il si on a 4 ou 5 ou n intéressé ?
Il faudrait faire une table pour les objets et une table pour les propositions (et même une pour les utilisateurs mais on va rester sur 2 pour l’instant)
On aurait donc une table objets avec id, nom, description, valeur
et une table propositions avec id, id_objet (foreign key de la table objets), interesse, propose
Avec ce design tu peux remonter directement la proposition la plus importante en faisant un LEFT JOIN
SELECT * FROM objets AS o LEFT JOIN propositions AS p ON o.id = p.id_objet
ORDER BY p.propose DESC LIMIT 0,1
SELECTo.name, u.name, op.propositionFROM objets AS o JOINobjet_has_proposition AS op ON o.id = op.objet_id JOINusers AS u ON u.id = op.user_id ORDERBY op.propose DESC LIMIT 0,1
Ou si tu ne veux pas toucher a la base de données et t’amuser uniquement en php, tant que tu construit correctement ton tableau de base qui va contenir les valeurs, ça va être facile.
Exemple :
Merci pour vos réponses, je vais essayer de voir ce que j’arrive à faire avec toutes vos idées et je vous tiens au courant !
edit :
Merci à tous, j’ai essayé la solution de Haza, qui me permet de ne pas modifier ma base et ça fonctionne Nickel !
par contre je n’ai pas bien compris ce qui ce passe !
Pour commencer on fait une variable « values » dans laquelle on fait une sorte de tableau avec les noms et les propositions, par contre pourquoi faut il mettre strictement supérieur ( => ) entre les deux ?
Ensuite on affiche la valeur numérique max puis un tiret, mais a quoi correspond le : array_search(max($values), $values) ?
En tout cas merci beaucoup Haza !
@plouff : Ta solution marche aussi, sans modifier la base mais par contre il faut coder toutes les possibilités et c’est vrai que si il commence a y avoir une dizaine de personnes interessés sa risque d’être compliqué
[quote=« qentinium, post:7, topic: 55176 »][/quote]
Il créé un tableau de tes valeurs
array[‹ foo ›] = 5
array[‹ bar ›] = 10
array[‹ baz ›] = 2
le « => » n’est pas supérieur et égal, c’est la manière d’assigner des valeurs aux index dans un tableau.
Ensuite on affiche la valeur numérique max puis un tiret, mais a quoi correspond le : array_search(max($values), $values) ?
on demande la valeur max au tableau (grave à max()) pour l'afficher, mais il faut le nom de l'objet qui correspond à cette valeur
array_search ramene l'index pour la valeur demandé (ici max($values)) dans le tableau $values