Déterminer la position d'un enregistrement

Déterminer la position d'un enregistrement - SQL/NoSQL - Programmation

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 ?

Reply

Marsh Posté le 28-08-2008 à 14:49:58   

Reply

Marsh Posté le 28-08-2008 à 15:24:28    

:hello:  
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.

Reply

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 ..

 


Message édité par grosbin le 28-08-2008 à 15:38:25

---------------
Photos Panoramiques Montagnes Haute Savoie
Reply

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

Reply

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


Message édité par MagicBuzz le 28-08-2008 à 16:16:02
Reply

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

Reply

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)

Reply

Marsh Posté le 28-08-2008 à 20:57:44    

oui, ça devrait marcher aussi effectivement :jap:

Reply

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 [:antoni]
 
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


Message édité par malicious le 29-08-2008 à 13:19:59
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed