MySQL, получить рейтинг пользователей
У меня есть таблица mysql, как показано ниже:
id name points
1 john 4635
3 tom 7364
4 bob 234
6 harry 9857
В основном я хочу получить индивидуальный рейтинг пользователя без выбора всех пользователей. Я хочу только выбрать одного пользователя по id и получить рейтинг пользователей, который определяется количеством очков, которые у них есть.
Например, вернитесь к тому с выбором ранга 2 по id 3.
Приветствия
Eef
Ответы
Ответ 1
SELECT uo.*,
(
SELECT COUNT(*)
FROM users ui
WHERE (ui.points, ui.id) >= (uo.points, uo.id)
) AS rank
FROM users uo
WHERE id = @id
Плотный ранг:
SELECT uo.*,
(
SELECT COUNT(DISTINCT ui.points)
FROM users ui
WHERE ui.points >= uo.points
) AS rank
FROM users uo
WHERE id = @id
Ответ 2
Решение @Quassnoi потерпит неудачу в случае связей. Вот решение, которое будет работать в случае связей:
SELECT *,
IF (@score=ui.points, @rank:[email protected], @rank:[email protected]+1) rank,
@score:=ui.points score
FROM users ui,
(SELECT @score:=0, @rank:=0) r
ORDER BY points DESC
Ответ 3
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