102 votes

Avec MySQL, comment puis-je générer une colonne contenant l’index de l’enregistrement dans une table ?

Est il possible que je puisse obtenir le véritable numéro de ligne à partir d'une requête?

Je veux être capable de commander une table appelée league_girl par un champ appelé score; et de retourner le nom d'utilisateur et la ligne réelle de la position de ce nom d'utilisateur.

Je suis désireux de classer les utilisateurs afin que je puisse dire d'où un utilisateur particulier est, c'est à dire. Joe est en position de 100 à 200, c'est à dire

User Score Row
Joe  100    1
Bob  50     2
Bill 10     3

J'ai vu quelques solutions ici, mais j'ai essayé la plupart d'entre eux et aucun d'entre eux retournent, en réalité, le numéro de ligne.

J'ai essayé ceci:

SELECT position, username, score
FROM (SELECT @row := @row + 1 AS position, username, score 
       FROM league_girl GROUP BY username ORDER BY score DESC) 

Comme dérivé

...mais il ne semble pas de retour de la position de ligne.

Des idées?

175voto

Daniel Vassallo Points 142049

Vous pouvez essayer ce qui suit :

La partie permet l’initialisation de variable sans nécessiter un distinct commande.

Scénario de test :

Tester la requête :

Résultat :

39voto

Peter Johnson Points 1156
SELECT @i:=@i+1 AS iterator, t.*
FROM tablename t,(SELECT @i:=0) foo

4voto

Hearth Points 33

Vous pouvez également utiliser

pour initialiser la variable de compteur.

3voto

ftzdomino Points 61

En supposant que MySQL supporte, vous pouvez facilement le faire avec une sous-requête SQL standard :

De grandes quantités d’affichage des résultats, ce sera un peu lent et vous ne voudrez pas passer à une jointure réflexive au lieu.

3voto

Heryno Points 1

Si vous voulez seulement connaître la position d’un utilisateur spécifique après l’ordre de la partition de domaine, vous pouvez simplement sélectionner toutes les lignes de votre table, où la cote de champ est plus élevé que le score de l’utilisateur actuel. Et utiliser le numéro de ligne retourné + 1 pour savoir quelle position de l’utilisateur actuel.

En supposant que votre table est « league_girl » et votre domaine principal est « id », vous pouvez utiliser ceci :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X