Déterminer la position d'un enregistrement - SQL/NoSQL - Programmation
Marsh Posté le 28-08-2008 à 15:24:28
S'il faut chercher le score d'une personne, alore faire
SELECT pseudo,score FROM table_score WHERE pseudo = pseudo_en_question |
S'il faut chercher les personnes qui ont un certain score, alors faire
SELECT pseudo,score FROM table_score WHERE score = score_en_question |
Si cela prend du temps, créer un index sur le champ du critère de recherche.
Marsh Posté le 28-08-2008 à 15:38:10
malicious a écrit : Le problème est que si il y a des milliers d'enregistrements, cette méthode me semble lourde en mémoire et en vitesse d'exécution. Une autre idée ? |
En effet, je ne vois pas trop d'alternatives ( à moins que tu divises cette requete par pas de 90 enregistrements ) limit n,90
ce qui te ferait highscore
page 1 de 1 à 90
page 2 de 91 à 180 etc ..
Marsh Posté le 28-08-2008 à 15:53:34
Merci olivthill mais ce n'est ni le pseudo, ni le score que je cherche et ni un classement, c'est une position dans un classement. Comme le dit grosbin, limiter à un certain nombre d'enregistrements créera une sorte de highscore... ça peut être une bonne alternative quand il y en a trop.
Mettre un index sur le champ du critère de recherche, oui, mais quand on fait des recherches multicritères, faut-il des index sur tous les champs !?
Merci à vous
Marsh Posté le 28-08-2008 à 16:14:49
quel sgbd ?
avec mysql :
http://www.shinguz.ch/MySQL/mysql_ranking.html
après t'as plus qu'à faire un select autour de ça pour ne récupérer que le rank de la ligne qui te convient
Marsh Posté le 28-08-2008 à 19:40:07
oui, avec mysql... alors là, c'est vraiment ça que je cherchais, je ne savais même pas qu'on pouvait manipuler des variables comme ça dans mysql, c'est puissant ! Merci beaucoup
Marsh Posté le 28-08-2008 à 20:42:26
J'ai du mal comprendre mais ca me semble très simple. La position dans un classement, c'est tout simplement le nombre de personnes situées avant ?
Donc :
SELECT count(1) FROM table_score WHERE score > (SELECT score FROM table_score WHERE pseudo=pseudo_en_question)
Marsh Posté le 29-08-2008 à 10:18:21
En effet ça marche très bien, belle logique pour déterminer une position d'un enregistrement particulier
Merci à vous tous, toutes ces solutions seront très utiles selon les besoins.
Edit: cette méthode est aussi bien adaptée en cas d'égalité dans les scores car elle renverra toujours le même classement
Marsh Posté le 28-08-2008 à 14:49:58
Bonjour,
J'ai un table qui contient un pseudo et un score. Je me pose la question de comment connaître la position d'un enregistrement après un tri croissant sur le score.
J'avais pensé faire SELECT pseudo,score FROM table_score ORDER BY score et et puis le parcourir avec mysql_fetch_array() et sortir de la boucle while() quand le pseudo en question est trouvé : sa position est celle d'une variable qui s'incrémente dans la boucle.
Le problème est que si il y a des milliers d'enregistrements, cette méthode me semble lourde en mémoire et en vitesse d'exécution. Une autre idée ?