我正在尝试获取 MySQL SELECT 语句的排名值(MySQL 不是我太熟悉的东西)。此查询以正确的顺序(通过更多的统计数据)为我提供了我正在寻找的正确结果,但我需要从结果中获取特定值。SELECT id, stats,@curRank := @curRank + 1 AS rankFROM statistics.web_stats p, (SELECT @curRank := 0) r ORDER BY stats DESC;给了我这个预期的结果:id,stats,rank999,291,11137,82,21084,79,31111,60,41097,55,51094,51,61109,50,71112,49,81154,44,91082,36,10我需要做什么来获取任何特定 id 的排名值,例如,在我的 PHP 代码中,如何找到 id 1111 的排名位置(以返回“4”的排名值)?我不得不用锄头进一步从结果中提取值。我是否需要以某种方式保存它们,或者我可以进一步扩展 MySQL 查询吗?
1 回答
宝慕林4294392
TA贡献2021条经验 获得超8个赞
您可以使用以下任一解决方案:
您需要使用子查询来维护排名位置。
这将为您提供排名为 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 stat
WHERE 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
- 1 回答
- 0 关注
- 127 浏览
添加回答
举报
0/150
提交
取消