【发布时间】:2019-07-22 07:58:07
【问题描述】:
我之前向this 提出了一个关于从玩家列表中生成包含前 3 名得分以及登录用户得分的排名表的问题。查询如下所示:
SELECT *
FROM
( SELECT a.*
, @rank := @rank+1 rank
FROM users a
JOIN (SELECT @rank:=0) vars
ORDER
BY highscore DESC
, userid
) x
WHERE name = 'jennie'
OR rank <= 3
ORDER
BY rank;
This fiddle 由我上一个问题的接受答案提供,演示了正在使用的查询。
但是,此查询提供的rank 列的内容在技术上是行号,而不是真正的排名——这意味着当两个用户的分数相同时,他们将获得不同的排名。我怎样才能为具有相同分数的唯一用户提供相同的排名 - 例如,有效的结果是:
userid name highscore rank
3 harry 50 1
1 james 50 1
0 sam 20 2
4 jenny 7 4
【问题讨论】:
-
这取决于你,但我认为这样存储领带更常见:1,1,3,4,4,4,7
标签: mysql