gpt4 book ai didi

php - Mysql - 如何在Order by之后获取行号?

转载 作者:可可西里 更新时间:2023-11-01 06:36:00 26 4
gpt4 key购买 nike

假设我有一个包含以下列的表格:


p_id

用户名

点数


假设这些列有超过 5000 条记录。所以我们实际上有带积分的用户。每个用户的积分记录都有一个唯一的行。想象一下,每个用户都可以通过点击某个地方来获得网站上的积分。当他们点击时,我会用他们得到的分数更新数据库。

所以我们有一张表,上面有 5000 多个有积分的人的记录,对吗?现在我想按分数(降序)对它们进行排序,这样如果我运行 MySQL 查询,分数最高的用户将位于页面顶部。

我可以通过简单地运行这样的查询来做到这一点:

SELECT `p_id` FROM `point_table` ORDER BY `points` DESC

此查询将按点降序给我所有记录。

好的,我的问题来了,现在(当它被订购时)我想向每个用户显示他们实际所在的位置。所以我想给每个用户这样的话:“你是 5374 个用户中的第 623 个”。问题是我无法指定“623”号码。

我想运行一个按点排序表的查询,它应该“搜索”或计算记录所在的行号,然后返回对我有值(value)。

任何人都可以帮助我如何为此构建查询吗?这将是一个非常大的帮助。谢谢。

最佳答案

This answer应该适合你:

SET @rank=0;
SELECT @rank:=@rank+1 AS rank, p_id FROM point_table ORDER BY points DESC;

更新:您可能还想考虑在更新点并将其保存到同一表中的附加列时计算排名。这样你也可以选择一个用户并知道他的等级。这取决于您的用例,什么更有意义并且性能更好。

更新:我们在评论中得出的最终解决方案如下所示:

SELECT
rank, p_id
FROM
(SELECT
@rank:=@rank+1 AS rank, p_id, userid
FROM
point_table, (SELECT @rank := 0) r
ORDER BY points DESC
) t
WHERE userid = intval($sessionuserid);

关于php - Mysql - 如何在Order by之后获取行号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12341452/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com