我有一张这样的 table :
users
:
| username | statistics |
----------- ---------------------------------------
0 | peter200 | { "gamesWon": 4, "gamesPlayed" : 4} |
1 | eminem33 | { "gamesWon": 7, "gamesPlayed" : 20} |
注意:(statistics = "JSON")
我想创建一个排名列表。
因此statistics. gamesWon
中编号最大的用户获得排名 numero uno 1
等等。
到目前为止,我得到的是这样的东西(完全像我希望的那样工作):
SELECT username, statistics, @rank := @rank + 1 AS rank
FROM users, (SELECT @rank := 0) r
WHERE JSON_EXTRACT(statistics, '$.gamesWon')
ORDER BY JSON_EXTRACT(statistics, '$.gamesWon') DESC
关于我的问题:现在我想更新上面的查询以获取特定排名索引中的信息(比如说从排名 2 到排名 10) .
添加AND rank > 2 AND rank < 10
到 WHERE clause
似乎不是一个可行的解决方案。因此,我们将不胜感激任何帮助。
最佳答案
你需要用子查询包装它:
SELECT *
FROM (SELECT username, statistics, @rank := @rank + 1 AS rank
FROM users, (SELECT @rank := 0) r
WHERE JSON_EXTRACT(statistics, '$.gamesWon')
ORDER BY JSON_EXTRACT(statistics, '$.gamesWon') DESC
) s
WHERE rank > 2 AND rank < 10
关于mySql 排名排序从-到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52800968/