MySQL, obtenir le rang des utilisateurs
j'ai une table mysql comme ci-dessous:
id name points
1 john 4635
3 tom 7364
4 bob 234
6 harry 9857
je veux fondamentalement obtenir un rang d'utilisateur individuel sans sélectionner tous les utilisateurs. Je ne veux sélectionner un seul utilisateur par id et obtenir les utilisateurs, au rang qui est déterminé par le nombre de points qu'ils ont.
par exemple, revenir tom avec le rang 2 en sélectionnant par l'id 3.
Cheers
Eef
10
demandé sur
RailsSon
2009-08-18 17:26:14
3 réponses
SELECT uo.*,
(
SELECT COUNT(*)
FROM users ui
WHERE (ui.points, ui.id) >= (uo.points, uo.id)
) AS rank
FROM users uo
WHERE id = @id
rang Dense:
SELECT uo.*,
(
SELECT COUNT(DISTINCT ui.points)
FROM users ui
WHERE ui.points >= uo.points
) AS rank
FROM users uo
WHERE id = @id
18
répondu
Quassnoi
2014-02-11 15:30:26
Solution par @Quassnoi va échouer en cas de liens. Voici la solution en cas de liens:
SELECT *,
IF (@score=ui.points, @rank:=@rank, @rank:=@rank+1) rank,
@score:=ui.points score
FROM users ui,
(SELECT @score:=0, @rank:=0) r
ORDER BY points DESC
2
répondu
Arvind Bhardwaj
2013-05-03 11:07:55
SET @rownum := 0;
SELECT rank, score FROM ( SELECT @rownum := @rownum +1 AS rank, `score` ,`user_id`
FROM leaderboard
ORDER BY `score` DESC , `updated_timestamp` ) as result WHERE `user_id`=$user_id
LIMIT 1
0
répondu
Saurabh Chandra Patel
2013-06-18 07:15:20