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 您自己的用户。
我正在尝试显示我的排行榜的前 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 您自己的用户。