MySQL 排名与表中的高分不匹配

标签 mysql leaderboard scoring

在制作游戏时,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/

相关文章:

mysql - 使用 Group By 计算字符串出现次数的 SQL 总和

php - CREATE 命令被拒绝 - 您能否回答更改任何权限以允许我的 PHP-My-Admin 传递以下 SQL 命令代码?

c++ - windows下如何使用cpp通过odbc获取mysql中时间戳类型的字段

python - 优化社交排行榜

基于数组/嵌套内最大分数的 Elasticsearch 函数评分

mysql - HSQL 中的大写

algorithm - 按用户评论标准订购对象

ruby-on-rails - Rails Redis 排行榜

python - 在猜数字游戏中添加计分系统,包括再次玩

java - 我的 java 游戏的计分系统