使用MySQL获取用户排名

使用MySQL获取用户排名,mysql,ranking,Mysql,Ranking,我读了很多关于这个问题的话题,但我找不到解决办法 我有一个表(称为用户)与我的网站的用户。他们有道理。例如: +-----------+------------+ | User_id | Points | +-----------+------------+ | 1 | 12258 | | 2 | 112 | | 3 | 9678 | | 4 | 689206 | | 5

我读了很多关于这个问题的话题,但我找不到解决办法

我有一个表(称为用户)与我的网站的用户。他们有道理。例如:

+-----------+------------+
| User_id   | Points     |
+-----------+------------+
| 1         | 12258      |
| 2         | 112        |
| 3         | 9678       |
| 4         | 689206     |
| 5         | 1868       |
+-----------+------------+
在页面顶部设置变量$user\u id。例如,用户_id是4。现在我想通过点获得用户的排名(如果用户的id为4,那么输出应该为1)


多谢各位

如果您不想在mysql之外执行此操作,则需要使用变量来计算排名

下面是一个解决方案,它准确地描述了您想要的:

SELECT rank FROM (
   SELECT User_id, Points,
          FIND_IN_SET(
                Points,
                   (SELECT  GROUP_CONCAT(
                           DISTINCT Points 
                            ORDER BY Points   DESC
                        )
               FROM    users)
            ) as rank
    FROM   users )
WHERE User_id = 4;


您仍然需要它,您希望直接为每个记录使用它,将它存储在记录中并自己更新它。没有任何合理的查询可以直接为您提供排名,而无需存储在实际表上(我的意思是不只是几百条记录)。

此查询应该满足您的要求:

SELECT rank FROM (
   SELECT User_id, Points,
          FIND_IN_SET(
                Points,
                   (SELECT  GROUP_CONCAT(
                           DISTINCT Points 
                            ORDER BY Points   DESC
                        )
               FROM    users)
            ) as rank
    FROM   users )
WHERE User_id = 4;
更新了一些更有用的内容:

SELECT 
    user_id, 
    points, 
    (SELECT COUNT(*)+1 FROM users WHERE Points>x.points) AS rank_upper, 
    (SELECT COUNT(*) FROM users WHERE Points>=x.points) AS rank_lower 
FROM 
    `users` x 
WHERE x.user_id = 4
其中包括用户所处的级别范围。例如,如果前五名的分数是5 4 3,结果将是:

id points rank_upper rank_lower
id 5      1          1
id 4      2          2
id 3      3          5
id 3      3          5
id 3      3          5
已经有了适合您目的的软件。

这可能会有所帮助

SELECT @rank:=@rank+1 AS rank,`User_id`,`Points` FROM `users` u JOIN (SELECT @rank:=0) r ORDER BY u.Points DESC

“找不到解决方案”是什么意思?你在找“密码”吗?这就是你要找的吗?是的,我在找密码。在其他Stackoverflow向导的帮助下,我尝试了一些方法,但无法正常工作:-(非常感谢。但是我应该怎么做:做一个MySQL查询或者用PHP在for循环中检查它?我的意思是:如果有超过40000个用户,什么更快?我更新了一点。除非你有一个非常小的表,否则你必须保持排名。好吧,那么你的意思是我应该在表中存储排名?我不应该在rankingsp上计算排名。)年龄?是的。您应该单独处理计算(例如,当您更改值或成批更改时)还有显示。因为所有基于sql的计算都很慢。这不需要变量。很确定他没有要求php代码,不仅他没有提到php。我不知道什么更好更快?php还是MySQL?我只是归纳了以下几行:
在页面顶部设置了变量$user\id。
他在我对我的回答有很多评论,所以这可能会引起他的兴趣。没有必要投反对票。