使用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。
他在我对我的回答有很多评论,所以这可能会引起他的兴趣。没有必要投反对票。