performance mySQL rang d'un enregistrement

Consultez la formation à Google Analytics de WebRankInfo / Ranking Metrics


sietjp
WRInaute passionné
WRInaute passionné
 
Messages: 622
Inscription: Dim Déc 14, 2003 21:05

performance mySQL rang d'un enregistrement

Message le Jeu Juil 15, 2004 12:21

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

Tex
WRInaute impliqué
WRInaute impliqué
 
Messages: 447
Inscription: Ven Juil 09, 2004 11:17

Message le Jeu Juil 15, 2004 13:19

il faut faire une requete du genre :

Code: Tout sélectionner
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 .

wiwi
WRInaute discret
WRInaute discret
 
Messages: 54
Inscription: Sam Juin 26, 2004 12:59

Message le Jeu Juil 15, 2004 13:29

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.

Tex
WRInaute impliqué
WRInaute impliqué
 
Messages: 447
Inscription: Ven Juil 09, 2004 11:17

Message le Jeu Juil 15, 2004 13:31

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é :)


sietjp
WRInaute passionné
WRInaute passionné
 
Messages: 622
Inscription: Dim Déc 14, 2003 21:05

Message le Jeu Juil 15, 2004 14:16

wiwi a écrit: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 ;)


George Abitbol
WRInaute accro
WRInaute accro
 
Messages: 1923
Inscription: Ven Juin 06, 2003 7:57

Message le Jeu Juil 15, 2004 14:54

La même chose mais en une seule requête :

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


Fred


sietjp
WRInaute passionné
WRInaute passionné
 
Messages: 622
Inscription: Dim Déc 14, 2003 21:05

Message le Ven Juil 16, 2004 9:30

pour info ça gagne un facteur 10 à 50, c'est mon hébergeur qui va être content, merci à tous!


Formation recommandée sur ce thème :

Formation Google Analytics : en 2 jours, apprenez comment exploiter l'essentiel des possibilités de l'outil de mesure d'audience de Google. Formation animée par Julien Coquet, expert certifié officiellement par Google Analytics.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

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