我想在排行榜中找到一个用户的位置,并返回上面的4个用户和下面的4个用户。
我的表'predictions‘看起来像这样:
+----+---------+--------+-------+---------+
| id | userId | score | rank | gameId |
+----+---------+--------+-------+---------+
| 1 | 12 | 11 | 1 | 18 |
| 2 | 1 | 6 | 4 | 18 |
| 3 | 43 | 7 | 3 | 12 |
| 4 | 4 | 9 | 2 | 18 |
| 5 | 98 | 2 | 5 | 19 |
| 6 | 3 | 0 | 6 | 18 |
+----+---------+--------+-------+---------+
显然,这是没有正确排序的,所以我运行以下命令:
SELECT l.userId,
l.rank,
l.score,
l.createdAt,
@curRow := @curRow + 1 AS row_number
FROM (SELECT * FROM `predictions` WHERE gameId = 18) l
JOIN (SELECT @curRow := 0) r
ORDER BY rank ASC
这样我就能找到一张很好的桌子,上面的每一项都有编号。
然后,我想搜索这个生成的表,找到userId = X的row_number,然后返回该结果的“周围”值。
我想我已经理解了查询的逻辑,我只是不知道如何引用由上面的查询“生成”的表。
它应该是这样的:
SELECT *
FROM (
SELECT l.userId,
l.rank,
l.score,
l.createdAt,
@curRow := @curRow + 1 AS row_number
FROM (SELECT * FROM `predictions` WHERE gameId = 18) l
JOIN (SELECT @curRow := 0) r
ORDER BY rank ASC) generated_ordered_table
WHERE row_number < (SELECT row_number FROM generated_ordered_table WHERE userId = 1)
ORDER BY row_number DESC
LIMIT 0,5
此操作失败。我要做的是用正确的查询生成我的第一个表,给它一个别名generated_ordered_table,然后在后面的查询中引用这个“表”。
我该怎么做呢?
转载请注明出处:http://www.songfuwangmfj.com/article/20230526/1820681.html