performance mySQL rang d'un enregistrement

WRInaute occasionnel
Bonjour,
Quelle est la méthode la plus performante pour récupérer le rang d'un enregistrement dans une table classée selon un champ?

Par exemple la table (id,joueurid,score) contient 10000 joueurs

je voudrais récupérer le classement du joueurid x en fonction de son score (ORDER BY score DESC)?

Pour l'instant je récupère tous les scores classés du plus grand au plus petit et je cherche par dicotomie le score de mon joueur, n'y a t il pas une requête mySQL qui pourrait faire ça?

Merci
 
WRInaute occasionnel
il faut faire une requete du genre :

Code:
select * from scores, joueurs where scores.joueurid=joueurs.id order by score.score desc limit 10

a noter que le limit est important pour l'optimisation, d'autre part il est important que tu fasse des clefs sur les champs associées (joueurid et id), sinon ça resque d'etre trés lent.

si en plus tu peut rajouter un cas de selection en 'and' dans ta requete , et de preference avec un champ doté d'une clé, tu optimisera d'autant mieux .
 
Nouveau WRInaute
tu peux faire quelque chose comme ca par ex :
select score from table where joueurid=x
tu obtiens $score
puis :
select count(*) from table where score>$score
et tu obtiens le nombre de personne ayant un score plus eleve.
 
WRInaute occasionnel
ha oui, au temps pour moi, j'avais mal compris la question ... :oops:

je pensais que tu voulais un classement , genre une liste des 10 premiers avec le nom du joueur...désolé :)
 
WRInaute occasionnel
wiwi a dit:
tu peux faire quelque chose comme ca par ex :
select score from table where joueurid=x
tu obtiens $score
puis :
select count(*) from table where score>$score
et tu obtiens le nombre de personne ayant un score plus eleve.

super! je vais tester ça avec un timer pour voir si j'y gagne mais je n'en doute pas une seconde!

merci à Tex aussi ;)
 
WRInaute passionné
La même chose mais en une seule requête :

Code:
SELECT COUNT( * ) + 1
FROM table a
INNER JOIN table b
ON b.id = $ton_id
WHERE a.score > b.score

Fred
 
Discussions similaires
Haut