сортировка ранга mySql от-до - PullRequest
0 голосов
/ 14 октября 2018

У меня есть такая таблица:

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 < 10 к WHERE clause, похоже, не являетсярабочий раствор.Так что любая помощь будет очень признательна.

Ответы [ 2 ]

0 голосов
/ 14 октября 2018

Вам на самом деле не нужен подзапрос.Вы можете использовать limit с offset:

SELECT username, statistics, @rank := @rank + 1 AS rank 
FROM users CROSS JOIN (SELECT @rank := 0) r 
WHERE JSON_EXTRACT(statistics, '$.gamesWon') 
ORDER BY JSON_EXTRACT(statistics, '$.gamesWon') DESC
LIMIT 1, 9
0 голосов
/ 14 октября 2018

Вам нужно заключить его в подзапрос:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...