Aller au contenu

Trier une liste en php


gcvoiron

Sujets conseillés

Bonjour, le code ci dessous me donne une liste de mes membres, avec leurs ID, leur email, et leur nombre de filleuls (ref). Je voudrai trier cette liste par nombre de filleuls. Comment faire? Merci.

<?
include("header.inc.php");

?>
           </strong>Liste des membres classé par parrain</u></span><br>
           <table width="88%" height="32" border="1" align="center" bordercolor="#000000" bgcolor="#FFFFFF">
<tr><td width="9%" class=Style1>
<center class=Style1 >ID</center></td><td width="20%" class=Style1>
<center class=Style1 >E-mail</center></td><td width="17%" class=Style1>
<center class=Style1 >Ref
 <? $result = mysql_query("SELECT name, id, email, url, points, views, hits, savepoints FROM `demo_a_accounts`");
  while ($myrow = mysql_fetch_row($result)){
$direkt = mysql_num_rows(mysql_query("SELECT id FROM `demo_a_accounts` WHERE `refererid` = '$myrow[1]'"));
if ($myrow[7] == 1) {$sparen = "oui";} else {$sparen = "non";};
  $resultb = mysql_query("SELECT name, id, email, url, points, views, hits FROM `demo_a_accounts`  WHERE id='$myrow[1]'");
  while ($myrowb = mysql_fetch_row($resultb)) {
   echo"
<TR>
<td class=Style1><center class=Style1 ><b> $myrow[1] </b></TD>
<td class=Style1><center class=Style46 ><b><A href=mailto:$myrow[2]>E-mail</a></b></A></TD>
<td class=Style1><center class=Style1 ><b>Refs: $direkt </b></TD>";
};
};
?>

Modifié par gcvoiron
Lien vers le commentaire
Partager sur d’autres sites

Bonsoir,

aïe, une ou plusieurs requêtes dans une boucle...c'est ce qu'on appelle un tueur de ressources... imagine que ta première requête donne plusieurs milliers de résultats...cela représente autant de requêtes sur la base de données dans la boucle...

Passé ceci... lorsque tu veux trier les résultats d'une requête SELECT tu utilises la clause ORDER BY suivie de la liste de champs (l'ordre des champs détermine les critères prédominants) et l'ordre ASCendant ou DESCendant ...

Comme ton tri se fait sur le nombre de référents il suffit de les compter avec la fonction COUNT(nom_du_champ)...

Tu peux utiliser également la clause GROUP BY en conjonction avec COUNT, en groupant les utilisateurs par numéro de référent tu auras une liste des membre ayant des référents et comptant les refererid tu trouveras le nombre de filleul, cela donne à peu près cela :

SELECT id, name, email, url, points, views, hits, savepoints, COUNT(refererid) AS nb_filleuls FROM demo_a_accounts GROUP BY id ORDER BY nb_filleuls DESC

Tu as un aperçu de toutes les clauses courantes à la norme SQL/92 sur w3schools ;)

Lien vers le commentaire
Partager sur d’autres sites

Cette requête sert, comme je l'ai dit, à faire la liste de tes mêmes, ayant des référents et en les classant par le nombre de référents (DESC = par ordre décroissant)...

Ensuite tu peux l'exécuter comme toutes autres requêtes...

$result = mysql_query("SELECT id, name, email, url, points, views, hits, savepoints, COUNT(refererid) AS nb_filleuls FROM demo_a_accounts GROUP BY id ORDER BY nb_filleuls DESC");
if(mysql_num_rows($result) > 0) {
 while($membre = mysql_fetch_array($result)) {
   echo $membre['name']." = ".$membre['nb_filleuls']." référent(s)";
 }
} else {
 echo "Aucun membre ne correspond à la requête";
}

J'ai écris ça en 10 secondes... mais l'idée devrait te sembler familière...

Si tu as des problèmes avec la requête, utilise ce petit bout de code après avoir utilisé la fonction mysql_query :

echo mysql_errno() . ": " . mysql_error();

Cela affichera l'erreur survenue lors de la dernière requête sur la base de données.

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...