首页 > 解决方案 > mySql 等级排序从到

问题描述

我有一张这样的桌子:

users

   | username |              statistics              |
   ----------- ---------------------------------------
0  | peter200 | { "gamesWon": 4, "gamesPlayed" : 4}  | 
1  | eminem33 | { "gamesWon": 7, "gamesPlayed" : 20} | 

注意:(统计=“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 < 10WHERE clause似乎不是一个可行的解决方案。所以任何帮助将不胜感激。

标签: mysqlsqldatabasesorting

解决方案


您需要用子查询包装它:

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

推荐阅读