performance mySQL rang d'un enregistrement
7 messages
• Page 1 sur 1
Consultez la formation à Google Analytics de WebRankInfo / Ranking Metrics
-

sietjp - WRInaute impliqué

- Messages: 624
- Inscription: 14 Déc 2003
performance mySQL rang d'un enregistrement
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
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

- Messages: 449
- Inscription: 9 Juil 2004
il faut faire une requete du genre :
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 .
- 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 .
-

sietjp - WRInaute impliqué

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

- Messages: 1923
- Inscription: 6 Juin 2003
La même chose mais en une seule requête :
Fred
- 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
7 messages
• Page 1 sur 1
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 :
- [mySQL] Découper une table et gagner en performance ?
- performance système de commentaire/forums PHP/mySQL
- MySql : dupliquer une enregistrement
- MySQL GROUP BY sur le dernier enregistrement
- executer une requete mysql a partir d'un enregistrement
- Mysql: déplacer un enregistrement d'une table à une autre?
- page rang
- Toujour un rang 0
- Le rang dans WRI
- Rang d'un site
Consultez la description détaillée des produits ou services de Google suivants : Google AdWords
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

