在制作游戏时,MySQL 获取前 10 名的调用如下:
SELECT username, score FROM userinfo ORDER BY score DESC LIMIT 10
这似乎工作得很好,但是当与获取单个玩家排名的调用配对时,如果该玩家与其他玩家的得分相同,则数字可能会有所不同。获取玩家排名的调用如下:
SELECT (SELECT COUNT(*) FROM userinfo ui WHERE (ui.score, ui.username) >= (uo.score, uo.username)) AS rank FROM userinfo uo WHERE username='boddie';
第一次调用的示例结果:
+------------+-------+
| username | score |
+------------+-------+
| admin | 4878 |
| test3 | 3456 |
| char | 785 |
| test2 | 456 |
| test1 | 253 |
| test4 | 78 |
| test7 | 0 |
| boddie | 0 |
| Lz | 0 |
| char1 | 0 |
+------------+-------+
第二次调用的示例结果
+------+
| rank |
+------+
| 10 |
+------+
可以看出,第一次调用将玩家排在列表中的第 8 位,但第二次调用将他排在第 10 位。要进行哪些更改或我可以做些什么才能使这些调用给出匹配的结果?
提前感谢您的帮助!
最佳答案
您需要在第一个查询中:
ORDER BY
score DESC,
username DESC
这样它将达到第 10 名...这是由于第二个查询中的用户名比较:
(ui.score, ui.username) >= (uo.score, uo.username)
关于MySQL 排名与表中的高分不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17408781/