2011-07-11 2 views
1

J'ai une table MySQL appelée "MyTable" et elle liste essentiellement les noms d'utilisateur et les points (deux colonnes, le nom et les points). Je veux dire quelque chose comme «quel est le rang de joe1928?», Qui est bien sûr basé sur ses points. Comment est-ce que je pourrais faire ceci dans MySQL sans devoir télécharger toutes ces données et le trier et déterminer le rang moi-même?Classement dans la table MySQL

La personne avec le plus grand nombre de points seraient classés 1.

+0

Quels sont les critères/formules pour calculer le classement? –

+0

c'est basé sur les points. la personne ayant le plus de points est classée 1 – StanLe

Répondre

1

Essayez d'obtenir le nombre de personnes avec un score plus élevé que votre utilisateur:

select count(*) from MyTable where score > (select score from MyTable where user = 'Joe'); 

Cela retournera 0 pour le premier utilisateur.

0

This page seems to describe and solve your problem.

Notes à partir de cette page:

SET @rownum := 0; 
SELECT rank, correct FROM (
       SELECT @rownum := @rownum + 1 AS rank, correct, uid 
       FROM quiz_user ORDER BY correct DESC 
       ) as result WHERE uid=xxxxxxxx 
+0

woah cela semble compliqué. pouvez-vous me montrer comment je le ferais dans ma table avec mes noms de colonnes spécifiques? – StanLe

+0

La page que j'ai liée décrit votre problème et la solution dans les moindres détails. Je suggère d'essayer de lire cela. – Dave

0
SELECT @r AS Rank 
FROM MyTable u, (SELECT @r := 0) 
WHERE (@r := @r + 1) * (u.Username = 'joe1928') 
ORDER BY u.Score DESC 
LIMIT 1 
0
select * from [TABLENAME] where [USERNAME] = blah order by [POINTS] desc limit 1; 
0

Basé sur le lien affiché par votre requête @ Dave ressemblera quelque chose ci-dessous:

select Rank,name from 
     (select @rownum:[email protected]+1 AS 'Rank', p.name 
     from calls p, (select @rownum:=0) r 
     order by p.points desc) as rankResults 
where name = 'joe'; 
0

Ceci est d'une autre page de débordement de pile, semble résoudre votre problème.

SELECT uo.*, 
    (
    SELECT COUNT(*) 
    FROM users ui 
    WHERE (ui.points, ui.id) >= (uo.points, uo.id) 
    ) AS rank 
    FROM users uo 
    WHERE id = @id