Théo B. Posté 27 Mars 2006 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.
MarvinLeRouge Posté 27 Mars 2006 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
Théo B. Posté 27 Mars 2006 Auteur 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.
rportal Posté 27 Mars 2006 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
Théo B. Posté 28 Mars 2006 Auteur 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.
rportal Posté 28 Mars 2006 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.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant