Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2815 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Déterminer la position d'un enregistrement

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Déterminer la position d'un enregistrement

n°1779152
malicious
Posté le 28-08-2008 à 14:49:58  profilanswer
 

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 ?

mood
Publicité
Posté le 28-08-2008 à 14:49:58  profilanswer
 

n°1779182
olivthill
Posté le 28-08-2008 à 15:24:28  profilanswer
 

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

n°1779201
grosbin
OR die;
Posté le 28-08-2008 à 15:38:10  profilanswer
 

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
n°1779213
malicious
Posté le 28-08-2008 à 15:53:34  profilanswer
 

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

n°1779245
MagicBuzz
Posté le 28-08-2008 à 16:14:49  profilanswer
 

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
n°1779408
malicious
Posté le 28-08-2008 à 19:40:07  profilanswer
 

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

n°1779427
mrbebert
Posté le 28-08-2008 à 20:42:26  profilanswer
 

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)

n°1779437
MagicBuzz
Posté le 28-08-2008 à 20:57:44  profilanswer
 

oui, ça devrait marcher aussi effectivement :jap:

n°1779633
malicious
Posté le 29-08-2008 à 10:18:21  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Déterminer la position d'un enregistrement

 

Sujets relatifs
position combobox a l'ouverture [IMPOSSIBLE][Résolu][PHP] utf8_decode et accent en dernière position ?!
impossible de prendre l'apostrophe pour l'enregistrement dans mysqlComment accéder à l'enregistrement suivant ou précédent?
Image qui change en fonction position souris (Map Area + JS et/ou CSS)Repérer un enregistrement défectueux
[ACCESS] Procédure double clic sur enregistrementhtmlspecialchars(), à l'affichage ou à l'enregistrement ?
Problème de position de <DIV>MySQL : attribuer date à chaque enregistrement
Plus de sujets relatifs à : Déterminer la position d'un enregistrement


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR