Trier des resultats

Résolu/Fermé
troisbuses Messages postés 2 Date d'inscription vendredi 13 juin 2014 Statut Membre Dernière intervention 13 juin 2014 - Modifié par troisbuses le 13/06/2014 à 14:52
troisbuses Messages postés 2 Date d'inscription vendredi 13 juin 2014 Statut Membre Dernière intervention 13 juin 2014 - 13 juin 2014 à 16:42
Je cherche à trier et afficher par ordre décroissant une table (sans déclaration array)

Voici un exemple d'une partie de cette table :
id_joueur, pseudo, points
25 michel 5
30 sophie 2
25 michel 1
....
34 jean 3

Je voudrais afficher un classement par points (cumulés) tel que ci-dessous :

25 michel 6
34 jean 3
...
30 sophie 2

actuellement mon code permet d'afficher dans le désordre :

34 jean 3
25 michel 6
...
30 sophie 2

<?
$requete_joueur = mysql_query("SELECT joueur.id_joueur, joueur.pseudo, coupe.points FROM 'coupe'INNER JOIN 'joueur' ON joueur.id_joueur = coupe.id_joueur WHERE joueur.actif =0 GROUP BY 'id_joueur'");
$nb_joueur= mysql_num_rows($requete_joueur);

for ($x=0;$x<$nb_joueur;$x++) {
$id_equip[$x] = mysql_result($requete_joueur,$x,"id_joueur");
$id_pseudo[$x] = mysql_result($requete_joueur,$x,"pseudo");

$requete_point_joueur =mysql_query("SELECT joueur.id_joueur, joueur.pseudo, coupe.points FROM 'coupe' INNER JOIN 'joueur' ON joueur.id_joueur = coupe.id_joueur WHERE joueur.actif =0 AND coupe.id_joueur=".$id_equip[$x]);
$nb_jeu= mysql_num_rows($requete_point_joueur);

// le cumul des points par joueurs
for ($y=0;$y<$nb_jeu;$y++) {
$points[$x] = $points[$x] + mysql_result($requete_point_joueur,$y,"points");
}
}

// l'affichage dans le désordre
for ($x=0;$x<$nb_joueur;$x++) echo $id_pseudo[$x]." - ".$points[$x]."<br />";
?>

J'apprends sur le net et n'ai pas les fondamentaux, ce qui fait que je fais surement bcp de choses lourdes et moches... (d'ou mon pseudo)
merci de votre aide.
A voir également:

2 réponses

Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 525
13 juin 2014 à 16:16
Salut,

Tu pourrais récupérer le cumul de tes points directement en sql, ce qui est plus optimisé (moins de code et plus rapide) :

SELECT joueur.id_joueur, joueur.pseudo, SUM(coupe.points) AS totalpoints
FROM joueur LEFT JOIN coupe ON joueur.id_joueur = coupe.id_joueur
WHERE joueur.actif  = 0
GROUP BY joueur.id_joueur
ORDER BY totalPoints DESC


Cette requête devrait te retourner la liste complète des joueurs avec la somme de leurs points, trié selon le total des points par ordre décroissant.

Boonne journée
2
troisbuses Messages postés 2 Date d'inscription vendredi 13 juin 2014 Statut Membre Dernière intervention 13 juin 2014
13 juin 2014 à 16:42
Merci grandement Pitet !
0