Classement suivant un total calculé

Classement suivant un total calculé - PHP - Programmation

Marsh Posté le 28-01-2008 à 09:14:22    

Bonjour à tous,  
 
Je souhaiterai ajouter une colonne position à un tableau de résultat. J'éxécute une requete pour récupérer tous mes individus avec leur note (esthétique, morale...)
Pas de problème tous mes individus s'affiche les uns en dessous des autres. Je calcule leur note en additionnant esthétique + morale.
 
J'aimerai avoir une colonne 'position' où 1 est pour celui qui a rassemblé le plus de points, 2 pour le suivant et ainsi de suite...
 
Comment je peux procéder?
 
Merci par avance
JEnny


Message édité par jenny50 le 28-01-2008 à 14:47:35
Reply

Marsh Posté le 28-01-2008 à 09:14:22   

Reply

Marsh Posté le 28-01-2008 à 09:25:02    

Il suffit de faire un tri sur ton tableau.
La "position" d'une ligne sera tout simplement son indice (+1) dans le tableau.


Message édité par CyberDenix le 28-01-2008 à 09:25:22

---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 28-01-2008 à 09:25:44    

SELECT esthetique ,morale,esthetique + morale AS total
FROM maTable
ORDER BY total  dESC


Message édité par flo850 le 28-01-2008 à 09:26:04

---------------

Reply

Marsh Posté le 28-01-2008 à 10:21:05    

Merci pour ces réponses rapides.
CyberDenix : je ne comprends pas ta solution, cela ne change rien.
 
Flo850 : je ne savais pas que l'on pouvait faire esthétique + morale dans une requete. Maintenant, le problème pour moi et que je ne peux pas faire cette addition car j'ai plusieurs note dans esthétique que je sépare par des ";". donc je dois faire un total avec le résultats de ma requete. De même pour morale. C'est ensuite que je fais le total des totaux et c'est celui-ci que j'aimerai positionner.
 

Reply

Marsh Posté le 28-01-2008 à 10:25:38    

tu as donc un problème de conception de ta base de données

 

une colonne de base ded onnées ne doit JAMAIS contenir plus d'une valeur

 

en php , tu commence par stocker tout tes résultats dans un tableau , avec une colonne "total"
puis tu trie ce tableau sur cette colonne
enfin lors de l'affichage tu calcule la colonne "position"

Code :
  1. for($i = 0 ; $i < sizeof($monGrosTableauBienCrade) ; $i++)
  2. {
  3.       echo '<tr>';
  4.         //affichage de mes données
  5.       echo '<td>'.$monGrosTableauBienCrade[$i]["nom"].'</td>';
  6. .....
  7.       //affichaeg de la position
  8.       echo '<td>'.($i+1).'</tD>';
  9.       echo '</tr>';
  10. }
 


Message édité par flo850 le 28-01-2008 à 10:27:28

---------------

Reply

Marsh Posté le 28-01-2008 à 10:50:31    

Flo850 : je ne comprends pas comment je peux faire. Voici mon code:  
 

Code :
  1. ...requete...
  2. while()
  3. {
  4. $total = $esthetique + $moral ;
  5. <td><?=$nomIndividu?></td>
  6. <td><?=$esthetique?></td>
  7. <td><?=$moral?></td>
  8. <td><?=number_format($total/$max1*100,2,',','')?></td>
  9. }


 
Je souhaite ajouter un TD avec la position de mon individu?

Reply

Marsh Posté le 28-01-2008 à 11:14:43    

pour savoir sa positin , tu dois comparer le resultat d'un individu aux autres
 
si tu ne peux pas trier lors de la requete ( et c'est pas possible vu ta base de données ) , tu es obligé de passer par une etape ou tu stocke les resultats dans un tableau et ou tu les trie
 
ensuite, tu fais l'affichage


---------------

Reply

Marsh Posté le 28-01-2008 à 11:24:48    

ok, je te remercie, ceci vient confirmer ce que je pensais. Pour stocker mes résultats dans un tableau, je fais comment?
 
Merci

Reply

Marsh Posté le 28-01-2008 à 11:37:40    

ben tu déclares un tableau, tu l'alimentes avec les résultats de la requête, tu tries, tu affiches [:spamafote]

 
Code :
  1. //requête
  2. $sql = "ta requête";
  3. $rec = mysql_query($sql);
  4. $results = array();
  5. while ($rs = mysql_fetch_assoc($rec))
  6. {
  7.     $result[] = $rs["nom_de_la_colonne"];
  8. }
  9. $result = asort($result);
  10. //affichage
  11. ...


Message édité par soulmanto le 28-01-2008 à 11:41:06
Reply

Marsh Posté le 28-01-2008 à 12:03:15    

merci beaucoup à tous.

Reply

Marsh Posté le 28-01-2008 à 12:03:15   

Reply

Marsh Posté le 28-01-2008 à 14:29:01    

J'ai un problème d'affichage.
 

Code :
  1. $tb[$p] = $total; //p correspond à la position de mon individus (incrémenté)
  2. $ar1 = array_keys($tb);
  3. $ar2 = array_values($tb);
  4. $tab = array($ar1,$ar2);
  5. array_multisort($tab[1], SORT_ASC, SORT_NUMERIC);


 
Voici ce que cela donne :  

Code :
  1. array(2) { [0]=> array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) } [1]=> array(3) { [0]=> int(119) [1]=> float(468) [2]=> int(595) } }


 
C'est exactement ce que je veux mais maintenant, je n'arrive pas à afficher uniquement la "position" en fonction du total. Comment je dois faire?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed