在制作游戏时,获取前 10 名的 MySQL 调用如下:
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 位。有哪些更改或我可以做些什么来使这些调用产生匹配的结果?
预先感谢您的任何帮助!