gpt4 book ai didi

MySQL 排名(排名靠前的用户)

转载 作者:行者123 更新时间:2023-11-29 07:09:42 28 4
gpt4 key购买 nike

我需要一份游戏中排名最高的玩家列表。排名是即时计算的,数据取自两个表。我设法以正确的方式对它们进行排序,但是@rank:=0 -> @rank:=@rank+1 技巧,其中一个名为 rank 的附加字段正在计算玩家的位置对应于特定排序参数的,不返回正确的排名顺序。这是我的:

SET @rank := 0;
SELECT
@overall := u_p_s.exploration + u_p_s.story + u_p_s.collection + u_p.experience AS overall,
@rank := @rank + 1 AS rank,
u.nick, u.user_id, u_p_s.exploration, u_p_s.story, u_p_s.collection, u_p.experience
FROM user AS u
INNER JOIN user_profile_stats AS u_p_s ON u_p_s.user_id = u.user_id
INNER JOIN user_profile AS u_p ON u_p.user_id = u.user_id
ORDER BY overall DESC
LIMIT 0 ,20;

结果是整体顺序正确排名顺序不正确。我总是可以计算行数并获得应用层中的排名,但我仍然需要知道我的查询有什么问题。如果您对如何计算特定用户的排名有任何建议,我愿意接受建议。我见过很多类似的问题,但没有一个是即时计算排名参数的(总体),而且由于我不是最擅长 MySql 的,所以我恳请您的帮助。谢谢。

解决方法:

SET @rank:=0;
SELECT
@rank := @rank +1 AS rank,
nick, user_id, story, overall, collection, experience, exploration
FROM (
SELECT @overall := u_p_s.exploration + u_p_s.story + u_p_s.collection + u_p.experience AS overall,
u.nick, u.user_id, u_p_s.story, u_p.experience, u_p_s.collection, u_p_s.exploration
FROM user AS u
INNER JOIN user_profile_stats AS u_p_s ON u_p_s.user_id = u.user_id
INNER JOIN user_profile AS u_p ON u_p.user_id = u.user_id
ORDER BY overall DESC
LIMIT 0 , 20
) AS result

最佳答案

我认为问题在于您在排序之前先计算排名。

如果你这样尝试会怎样:

SELECT
@rank := @rank + 1 AS rank,
overall, u.nick, u.user_id, ...
FROM (SELECT ... <your query including ORDER BY>)

关于MySQL 排名(排名靠前的用户),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5303152/

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