SQL 排行榜显示

SQL leaderboard display

我正在尝试显示我的排行榜的前 15 位玩家,但我也想确保请求排行榜的玩家显示在其中,只有一个 SQL 请求

让我们把棋盘减少到只有 4 个玩家。

假设我(要求查看看板的人)排名第二,看板应该显示以下内容

pos,name
1,bob
2,ME
3,tony
4,andy

但是假设我排在第 150 位,那么董事会应该是

pos,name
1,bob
2,tony
3,andy
150,ME

我正在使用以下请求:

SELECT * FROM
(
SELECT name,rating,
(SELECT COUNT(*) 
FROM rank AS t2 
WHERE t2.rating > t1.rating) 
AS position FROM rank AS t1 
LIMIT 15
)  

UNION

SELECT name,rating,(SELECT COUNT(*)
FROM rank AS t2 
WHERE t2.rating > t1.rating) 
AS position FROM rank AS t1
WHERE t1.name = 'ben'

ORDER BY rating DESC

如果我的排名在前 15 名之间,则该板正确显示。 但是如果我超过了前 15 个查询 return 16 行,我是最后一个

简而言之,我想在排行榜上显示 15 个玩家,但其中一个必须是我

编辑:注意两个玩家可以处于相同的排名位置

SELECT * FROM
(
SELECT name,rating,
(SELECT COUNT(*) 
FROM rank AS t2 
WHERE t2.rating > t1.rating
    AND t1.name <> 'ben') 
AS position FROM rank AS t1 
LIMIT 14
)  

UNION

SELECT name,rating,(SELECT COUNT(*)
FROM rank AS t2 
WHERE t2.rating > t1.rating) 
AS position FROM rank AS t1
WHERE t1.name = 'ben'

ORDER BY rating DESC

在这里,不要在第一个查询中 return 您自己的用户并将其限制为 14。然后在第二个查询中仅 return 您自己的用户。