如何从 MySQL SELECT 语句获取排名位置

我正在尝试获取 MySQL SELECT 语句的排名值(MySQL 不是我太熟悉的东西)。


此查询以正确的顺序(通过更多的统计数据)为我提供了我正在寻找的正确结果,但我需要从结果中获取特定值。


SELECT id, stats,

@curRank := @curRank + 1 AS rank

FROM statistics.web_stats p, (SELECT @curRank := 0) r 

ORDER BY stats DESC;

给了我这个预期的结果:


id,stats,rank

999,291,1

1137,82,2

1084,79,3

1111,60,4

1097,55,5

1094,51,6

1109,50,7

1112,49,8

1154,44,9

1082,36,10

我需要做什么来获取任何特定 id 的排名值,例如,在我的 PHP 代码中,如何找到 id 1111 的排名位置(以返回“4”的排名值)?


我不得不用锄头进一步从结果中提取值。我是否需要以某种方式保存它们,或者我可以进一步扩展 MySQL 查询吗?


桃花长相依
浏览 129回答 1
1回答

宝慕林4294392

您可以使用以下任一解决方案:您需要使用子查询来维护排名位置。这将为您提供排名为 4 的结果:SELECT * FROM(    SELECT id, stats,    @curRank := @curRank + 1 AS rank    FROM statistics.web_stats p, (SELECT @curRank := 0) r     ORDER BY stats DESC) AS statWHERE rank = 4;您甚至可以使用LIMIT OFFSET进行查询,因为它们已经按顺序排列:    SELECT id, stats,    @curRank := @curRank + 1 AS rank    FROM statistics.web_stats p, (SELECT @curRank := 0) r     ORDER BY stats DESC     LIMIT 4, 1
打开App,查看更多内容
随时随地看视频慕课网APP