如何在同一查询中引用生成/别名表?

我想在排行榜中找到一个用户的位置,并返回上面的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