PHP/SQL - Classement numéroté avec table users pour jeu

ZelkiN
WRInaute impliqué
WRInaute impliqué
 
Messages: 500
Inscription: 27 Juil 2007

PHP/SQL - Classement numéroté avec table users pour jeu

Message le Ven Juil 27, 2007 13:53

Bonjour, je fais apel aux connaisseurs du php car j'ai un pti souci qui m'ennui.

En effet je suis en plein develloppement d'un gros site (elevage virtuel) mais j'ai un souci, c'est le classement.

Voila j'ai une table "users" dans laquelle sont stocké bien évidemment toutes les infos du client mais aussi sont nombre de points qu'il gagne en faisant diverse truc sur le site. Le champs "exp_eleveur" est en INT et donc peut aller de 0 à 9999...+ .

Concernant le classement je n'ai aucun probleme pour afficher les noms des 30 premiers... une simple récupération d'information et une répétition limitée a 30. parcontre je séche au niveau de la numérotation.

Quant le client entre dans son espace perso, il voit "classement général : xxx eme" , enfaite c'est ce "xxx" que je n'arrive pas à mettre en oeuvre . quelqu'un aurait t-il une idée ? merci à vous

bigjet
WRInaute discret
WRInaute discret
 
Messages: 211
Inscription: 21 Nov 2004

Message le Ven Juil 27, 2007 14:07

À la fin de chaque journée, tu parcoures toute ta table en triant par le nombres de points.
Ensuite, tu mets à jour le champ position de chaque joueur, en créant préalablement une variable compteur qui sera incrémentée à chaque fois que tu lis une ligne.

ZelkiN
WRInaute impliqué
WRInaute impliqué
 
Messages: 500
Inscription: 27 Juil 2007

Message le Ven Juil 27, 2007 14:14

On va donc devoir utilisé un WHILE non ? j'y comprend plus rien 8O php me dépasse parfois lol mais souvent :P

Est ce que tu aurai un portion de code qui pourrait m'éclairer? merci

bigjet
WRInaute discret
WRInaute discret
 
Messages: 211
Inscription: 21 Nov 2004

Message le Ven Juil 27, 2007 15:49

ok, donc pour commencer, rajoute un champ classement dans ta table users.

Code: Tout sélectionner
$rs = mysql_query("SELECT * FROM users ORDER BY nbpoints DESC);
$compteur = 1;
while($data=mysql_fetch_assoc($rs)
{
$pseudo = $data['pseudo']; //si tu as un champ id, prend lui
mysql_query("UPDATE users SET classement='$compteur' WHERE pseudo='$pseudo'")
$compteur ++;
}


Ensuite pour récupérer le classement d'un joueur, tu auras seulement à faire
SELECT classement FROM users WHERE pseudo='ZelkiN'

ZelkiN
WRInaute impliqué
WRInaute impliqué
 
Messages: 500
Inscription: 27 Juil 2007

Message le Mer Aoû 01, 2007 9:17

ok c'est super cool de ta part, oui c'est vrai j'avais pas penser a ce genre d'incrémentation ^^, malgré qu'a mon avis ce soit un peu lourd avec plus de 100000 membres ... je verrai lol, je vais tester ca mais d'apres ton code tout doit marché nikel crome, thanks a toi :D


rog
WRInaute passionné
WRInaute passionné
 
Messages: 1662
Inscription: 21 Sep 2006

Message le Mer Aoû 01, 2007 13:26

un count sur du numerique devrait etre instantané même sur 1000 000 de membres

rog

ZelkiN
WRInaute impliqué
WRInaute impliqué
 
Messages: 500
Inscription: 27 Juil 2007

Message le Ven Aoû 03, 2007 12:58

re bonjour, voila j'ai testé mais pti souci
le code :
Code: Tout sélectionner
$rs = mysql_query("SELECT * FROM users ORDER BY exp_eleveur DESC");
$compteur = 1;
while($data=mysql_fetch_assoc($rs);)
{
$id = $data['id']; //si tu as un champ id, prend lui
mysql_query("UPDATE users SET position='$compteur' WHERE id='$id'")
$compteur ++;
}


apres avoir mis des parentheses oubliées ;) j'ai encore une erreur, mais je ne sais pas trop comment la résoudre, ca vient de compteur = 1;
while($data=mysql_fetch_assoc($rs);)

Parse error: parse error in c:\program files\easyphp1-8\www\...\classement.php on line 6

quelqu'un pourrait m'aidé ? ty


rog
WRInaute passionné
WRInaute passionné
 
Messages: 1662
Inscription: 21 Sep 2006

Message le Ven Aoû 03, 2007 13:09

tu n'as pas fermé la ligne précédente (;)

rog

ZelkiN
WRInaute impliqué
WRInaute impliqué
 
Messages: 500
Inscription: 27 Juil 2007

Message le Ven Aoû 03, 2007 13:22

lol, voila j'ai trouvé, enfaite il y en avais un de trop, jamais de point virgules dans un while lol...

Code: Tout sélectionner
{
$id = $data['id']; //si tu as un champ id, prend lui
mysql_query("UPDATE users SET position='$compteur' WHERE id='$id'");
$compteur ++;
}


mais la encore un souci, ca ne me reconnais pas $id ...

NOTION : Undefined index: id


Suede
WRInaute accro
WRInaute accro
 
Messages: 3722
Inscription: 4 Oct 2002

Message le Ven Aoû 03, 2007 13:28

rog a écrit:un count sur du numerique devrait etre instantané même sur 1000 000 de membres

rog


Si tu comptes le nombre de résultat que retourne une requete

select champs where nombre_de_point < nombre de point du joueur, tu as le nombre de personne classé avant lui.
Son classement est donc +1.

François

ZelkiN
WRInaute impliqué
WRInaute impliqué
 
Messages: 500
Inscription: 27 Juil 2007

Message le Ven Aoû 03, 2007 13:41

j'y comprend rien, voila j'ai mis tout ce qu'il fallait, aucune erreur n'a lieu, ca a l'air de marché sauf que ... comme le dis "Suede" ca à l'air de m'updater +1...

enfaite j'ai 2 joueurs pour le moment (test), quand je lance le truc, ca me met que classement joueur 1 = 0 et que classement joueur 2 = 1, alors que joueur 1 est mieux classé que joueur 2... pti souci lol

ZelkiN
WRInaute impliqué
WRInaute impliqué
 
Messages: 500
Inscription: 27 Juil 2007

Message le Mer Aoû 08, 2007 15:32

up

Robinson
WRInaute passionné
WRInaute passionné
 
Messages: 2233
Inscription: 25 Oct 2005

Message le Mer Aoû 08, 2007 21:23

Perso, je n'affiche jamais le classement pour chacun (bon c'est vrai que pour moi, c'est pas primordial).
Mais éxécuter 100 000 fois (ou plus) une requête update en un seul script, ça me fait un peu peur...
La montée en charge ne doit pas être minime.


(je pourrai essayer mais j'ai la flemme lol)

FloBaoti
WRInaute impliqué
WRInaute impliqué
 
Messages: 755
Inscription: 30 Avr 2006

Message le Mer Aoû 08, 2007 21:26

En pleine nuit ce n'est pas bien grave. Tu fermes l'accès au site pendant 15 minutes et tu lances ton script.

bigjet
WRInaute discret
WRInaute discret
 
Messages: 211
Inscription: 21 Nov 2004

Message le Mer Aoû 08, 2007 21:35

Robinson a écrit:Perso, je n'affiche jamais le classement pour chacun (bon c'est vrai que pour moi, c'est pas primordial).
Mais éxécuter 100 000 fois (ou plus) une requête update en un seul script, ça me fait un peu peur...
La montée en charge ne doit pas être minime.


(je pourrai essayer mais j'ai la flemme lol)


Quand on a 100 000 membres, je pense qu'on a les infrastructures techniques pour faire face à ce genre de montée en charge :)

PHP/SQL - Classement numéroté avec table users pour jeu

Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités