Position de joueurs (points)

Eléphant du PHP | 69 Messages

17 oct. 2011, 18:40

Bonjour ,

J'ai fait un tableau html/php qui est alimenté par une base de donné pour afficher les positions de joueurs par rapport a leur points.
Quand je sort les donnés en php, je lui demande de les trier " ORDER BY points ASC " pour qu'ils soient en ordre de pointage.
Pour afficher leur rang, je fais un auto incrémentation de la variable rang. Le probleme est que PhP ne calcule pas dans le bonne ordre le rang .. ils sort les donné comme il veut et ensuite il les classe en ordre de points .. ce qui donne des rang non valide ...

Voici mon code :
<?	
$rank = 1;
include 'connect_bdd.php';

$result = mysql_query("SELECT * FROM user ORDER BY points ASC") 
or die(mysql_error()); 

    while($row = mysql_fetch_array( $result )) {
	// Print out the contents of each row into a table
	$pseudo = $row['pseudo'];
	$points = $row['points'];
	$win = $row['win'];
	$lose = $row['lose'];
?>
 
	<tr class="tb7">
		<td height="10" width="45" valign="middle" align="center">
		<font face="Nyala" color="#C09D7A" size="4"><?= $rank; ?></font></td>
		<td height="10" width="157" valign="middle" align="center">
		<font face="Nyala" color="#C09D7A" size="4"><?= $pseudo; ?></font></td>
		<td height="10" width="63" valign="middle" align="center">
		<font face="Nyala" color="#C09D7A" size="4"><?= $points; ?></font></td>
		<td height="10" width="47" valign="middle" align="center">
		<font face="Nyala" color="#C09D7A" size="4"><?= $win; ?></font></td>
				<td height="10" width="46" valign="middle" align="center">
		<font face="Nyala" color="#C09D7A" size="4"><?= $lose; ?></font></td>

	</tr>
<? 
$rank++;
   } ?>

Voici le résultat :
Image

Comment je pourrais avoir les rangs en ordre de points??

Eléphanteau du PHP | 11 Messages

17 oct. 2011, 20:58

Essaye en définissant "$rank = $rank++;" avant l'affichage du tableau.

Eléphant du PHP | 69 Messages

17 oct. 2011, 21:54

Dans la While ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

17 oct. 2011, 23:35

Ton code actuel ne se base absolument pas sur le résultat de la requête pour afficher le rang dans le tableau. Il se contente d'incrémenter une variable. Tu génères donc bien un tableau qui contiendra les rangs 1, 2, 3 etc. (voir le code source pour confirmation)

Je pense donc que tu as un script qui vient réordonner ton tableau après que celui-ci ait été généré, et c'est lui qui doit poser problème...

Ps : A noter par ailleurs que ton " ORDER BY points ASC " tri tes résultats par ordre croissant (donc de celui qui a le moins de points à celui qui a le plus de points... il serait donc plus logique de faire un DESC pour avoir le plus grand en premier)

Pps : si tu n'utilises pas les index numériques mais uniquement les noms des colonnes, mysql_fetch_assoc() est plus léger que mysql_fetch_array() ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 69 Messages

18 oct. 2011, 08:41

Personne aurais une idée de code pour les rangs ?? un array qui classerais les joueur et qui ajouterais le rang c'est possible ???

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

18 oct. 2011, 10:40

t'a essayé autre chose ?

Ryle te donne la solution.
Ta requête telle que tu la montre celle ci ordonne par point avec le plus petit en 1ère ce n'est pas ta capture d'écran.

Perso je t'aurais bien orienté vers les fonctions de fenêtrage de SQL mais mysql ne les implémente pas :mrgreen:

donc ce que tu a fait est bon seulement la requête ne l'est pas.

sinon tu peux utiliser la réponse de compète de Frédéric Brouard pour le faire en SQL
http://www.developpez.net/forums/d67657 ... ank-on-ne/ :mrgreen:

@+
Il en faut peu pour être heureux ......

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

18 oct. 2011, 22:12

Je me demande si je devrais utiliser mon invisibilité pour combattre le crime ou pour faire le mal... :-k

Pour la requête sql de compète, ça peut effectivement servir, mais ça risque d'être plus compliqué à gérer que php si on veut par exemple attribuer un même rang à des ex-aequo :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

18 oct. 2011, 23:13

wé c'est sur, dommage que mysql_mysql n’implémente pas les fenêtres :/
Il en faut peu pour être heureux ......