performance mySQL rang d'un enregistrement

Consultez la formation à Google Analytics de WebRankInfo / Ranking Metrics


sietjp
WRInaute impliqué
WRInaute impliqué
 
Messages: 624
Inscription: 14 Déc 2003

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 occasionnel
WRInaute occasionnel
 
Messages: 449
Inscription: 9 Juil 2004

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: 26 Juin 2004

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 occasionnel
WRInaute occasionnel
 
Messages: 449
Inscription: 9 Juil 2004

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 impliqué
WRInaute impliqué
 
Messages: 624
Inscription: 14 Déc 2003

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 passionné
WRInaute passionné
 
Messages: 1923
Inscription: 6 Juin 2003

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 impliqué
WRInaute impliqué
 
Messages: 624
Inscription: 14 Déc 2003

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!


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

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 les experts Google Analytics de Ranking Metrics.

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 1 invité