Théo B. Posté 27 Mars 2006 Partager Posté 27 Mars 2006 Bonjour, Je souhaite créer un système de notation, qui prend en compte divers critères. Les coefficients et critères pouvant etre modifiés par l'utilisateur, la moyenne doit etre calculée à chaque execution, en fonction de l'utilisateur. Mon problème réside dans le tri du tableau : comment faire pour sortir en premier le tableau contenant les notes qui a la plus haute moyenne ? Voici le code : function CompareAll(){ $query=@mysql_query('SELECT * FROM `'.PREFIX.'table` ORDER BY id DESC'); $fetch=@mysql_fetch_array($query); $i=0; $buffer=array(0=>'', 1=>'', 2=>''); while($content=@mysql_fetch_array($query)){ if(empty($_COOKIE['coefs'])){ $sum=$content['Mod']*1+$content['Them']*1+$content['Instal']*0.5+$content['Usab']*2+$content['Simpli']*2+$content['Res']*1.5+$content['Conn']*1; $total=$sum/9; $buffer[$i].='<h2>'.$content['title'].'</h2><table> <tr> <td>Modulabitlité : (1)</td> <td>Themabilité : (1)</td> <td>Installation : (0.5)</td> <td>Usabilité : (2)</td> <td>Simplicité : (2)</td> <td>UtilisationRessources : (1.5)</td> <td>Connaissances : (1)</td> <td>Moyenne :</td> </tr> <tr> <td>'.$content['Mod'].'</td> <td>'.$content['Them'].'</td> <td>'.$content['Instal'].'</td> <td>'.$content['Usab'].'</td> <td>'.$content['Simpli'].'</td> <td>'.$content['Res'].'</td> <td>'.$content['Conn'].'</td> <td>'.round($total,2).'</td> </tr></table><br />'; } else { $coef = $_COOKIE['coefs']; $coefunique = explode(";", $coef); $sum=$content['Mod']*$coefunique[0]+$content['Them']*$coefunique[1]+$content['Instal']*$coefunique[2]+$content['Usab']*$coefunique[3]+$content['Simpli']*$coefunique[4]+$content['Res']*$coefunique[5]+$content['Conn']*$coefunique[6]; $total=$sum/($coefunique[0]+$coefunique[1]+$coefunique[2]+$coefunique[3]+$coefunique[4]+$coefunique[5]+$coefunique[6]); $buffer[$i].='<h2>'.$content['title'].'</h2><table> <tr> <td>Modulabitlité : ('.$coefunique[0].')</td> <td>Themabilité : ('.$coefunique[1].')</td> <td>Installation : ('.$coefunique[2].')</td> <td>Usabilité : ('.$coefunique[3].')</td> <td>Simplicité : ('.$coefunique[4].')</td> <td>UtilisationRessources : ('.$coefunique[5].')</td> <td>Connaissances : ('.$coefunique[6].')</td> <td>Moyenne :</td> </tr> <tr> <td>'.$content['Mod'].'</td> <td>'.$content['Them'].'</td> <td>'.$content['Instal'].'</td> <td>'.$content['Usab'].'</td> <td>'.$content['Simpli'].'</td> <td>'.$content['Res'].'</td> <td>'.$content['Conn'].'</td> <td>'.round($total,2).'</td> </tr></table><br />'; } $i++; } foreach($buffer as $key=>$content){ echo $content; }} Ici, c'est la deuxieme partie du code qui importe. La "clé" avec laquelle j'aimerai trier le tableau est donc round($total,2). Merci. Lien vers le commentaire Partager sur d’autres sites More sharing options...
MarvinLeRouge Posté 27 Mars 2006 Partager Posté 27 Mars 2006 Salut, Proposition (à condition que j'ai bien compris la question) : 1) tu calcules tes différents tableaux html, que tu stockes dans des variables php 2) tu testes tes différentes moyennes, tu tries les éléments de ton tableau php en fonction 3) tu envoies dans le flux un implode des éléments de ton tableau php Lien vers le commentaire Partager sur d’autres sites More sharing options...
Théo B. Posté 27 Mars 2006 Auteur Partager Posté 27 Mars 2006 (modifié) 2) tu testes tes différentes moyennes, tu tries les éléments de ton tableau php en fonction <{POST_SNAPBACK}> Justement. Comment le faire ? (Sachant que je ne peux pas mettre ma moyenne en clé vu qu'il peut exister des moyennes égales) Modifié 27 Mars 2006 par Théo B. Lien vers le commentaire Partager sur d’autres sites More sharing options...
rportal Posté 27 Mars 2006 Partager Posté 27 Mars 2006 (modifié) Une solution simple est de mettre ton calcul de moyenne dans ta requete SQL. exemple: $query="(Mod*{$coefunique[0]}+Them*{$coefunique[1]}+Instal*{$coefunique[2]}+Usab*{$coefunique[3]}+". "Simpli*{$coefunique[4]}+Res*{$coefunique[5]}+Conn*{$coefunique[6]})" . "/({$coefunique[0]}+{$coefunique[1]}+{$coefunique[2]}+{$coefunique[3]}+{$coefunique[4]}+{$coefunique[5]}+{$coefunique[6]}) As moyenne," ." * FROM `".$PREFIX."table` ORDER BY moyenne DESC"; Modifié 27 Mars 2006 par rportal Lien vers le commentaire Partager sur d’autres sites More sharing options...
Théo B. Posté 28 Mars 2006 Auteur Partager Posté 28 Mars 2006 (modifié) Une solution simple est de mettre ton calcul de moyenne dans ta requete SQL. exemple: function CompareAll(){ $query=@mysql_query('SELECT * FROM `'.PREFIX.'table` ORDER BY id DESC'); $fetch=@mysql_fetch_array($query); $i=0; $buffer=array(); $buffer2=array(); while($content=@mysql_fetch_array($query)){ if(empty($_COOKIE['coefs'])){ $sum=$content['Mod']*1+$content['Them']*1+$content['Instal']*0.5+$content['Usab']*2+$content['Simpli']*2+$content['Res']*1.5+$content['Conn']*1; $total=$sum/9; @$buffer[$total]='<h2>'.$content['title'].'</h2><table> <tr> <td>Modulabitlité : (1)</td> <td>Themabilité : (1)</td> <td>Installation : (0.5)</td> <td>Usabilité : (2)</td> <td>Simplicité : (2)</td> <td>UtilisationRessources : (1.5)</td> <td>Connaissances : (1)</td> <td>Moyenne :</td> </tr> <tr> <td>'.$content['Mod'].'</td> <td>'.$content['Them'].'</td> <td>'.$content['Instal'].'</td> <td>'.$content['Usab'].'</td> <td>'.$content['Simpli'].'</td> <td>'.$content['Res'].'</td> <td>'.$content['Conn'].'</td> <td>'.round($total,2).'</td> </tr></table><br />'; } else { $coef = $_COOKIE['coefs']; $coefunique = explode(";", $coef); $sum=$content['Mod']*$coefunique[0]+$content['Them']*$coefunique[1]+$content['Instal']*$coefunique[2]+$content['Usab']*$coefunique[3]+$content['Simpli']*$coefunique[4]+$content['Res']*$coefunique[5]+$content['Conn']*$coefunique[6]; $total=$sum/($coefunique[0]+$coefunique[1]+$coefunique[2]+$coefunique[3]+$coefunique[4]+$coefunique[5]+$coefunique[6]); $buffer[$total]='<h2>'.$content['title'].'</h2><table> <tr> <td>Modulabitlité : ('.$coefunique[0].')</td> <td>Themabilité : ('.$coefunique[1].')</td> <td>Installation : ('.$coefunique[2].')</td> <td>Usabilité : ('.$coefunique[3].')</td> <td>Simplicité : ('.$coefunique[4].')</td> <td>UtilisationRessources : ('.$coefunique[5].')</td> <td>Connaissances : ('.$coefunique[6].')</td> <td>Moyenne :</td> </tr> <tr> <td>'.$content['Mod'].'</td> <td>'.$content['Them'].'</td> <td>'.$content['Instal'].'</td> <td>'.$content['Usab'].'</td> <td>'.$content['Simpli'].'</td> <td>'.$content['Res'].'</td> <td>'.$content['Conn'].'</td> <td>'.round($total,2).'</td> </tr></table><br />'; } $i++; } ksort($buffer); foreach ($buffer as $content) { echo $content; }} Modifié 28 Mars 2006 par Théo B. Lien vers le commentaire Partager sur d’autres sites More sharing options...
rportal Posté 28 Mars 2006 Partager Posté 28 Mars 2006 Le problème est que cette moyenne prend en compte les coefficients des cookies des utilisateurs si ils existent.Les moyennes n'appartiennent donc pas à la table SQL... oui j'avais bien vu. C'est pour cela que je t'avais proposé de calculer la moyenne dans la requete SQL car mySQL ou autre sait faire des operation arythmétique rapidement et aussi faire de l'ordonnencement sur des résultats. Les coefficients etant initialisés soit par les valeurs du cookies soit par les valeurs par défaut dans le php avant de construire la requete. Mais bon tu as trouvé une solution, c'est l'essentiel. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant