繁体   English   中英

MySQL如何通过投票数量获得用户排名

[英]MySQL how to get user rank by votes amount

我有两张桌子。 一个“用户”和一个“投票”,每个用户可以拥有n票。 现在,我选择一个用户列表并将其输出。 它与LEFT JOIN中的COUNT一起使用时效果很好,但是现在我要计算用户的RANK(第1,第2,第3,...)。

从理论上讲,使用ORDER BY投票非常容易,但我也允许用户按用户日期排序(当他们加入时)。 我的查询中也有一个LIMIT分页。 那么我该如何最好地解决呢?

$user_sql   = $db->query("SELECT u.*, COUNT(v.voteId) AS user_votes 
                          FROM cs_users AS u
                          LEFT JOIN cs_users_votes AS v 
                          ON u.userId = v.voteUserId");

(基本查询,但将添加分页和排序器ORDER BY / LIMIT等。)

希望能对您有所帮助!

好吧,要计算排名,您可以使用此处找到的排名功能,它将考虑结果联系对每个用户进行排名。 如果添加分页,则可能尝试递归地传递上一页的结果。

至于功能本身

SET @curRank :=0, @prevRank := NULL;
SELECT u.*, COUNT(v.voteId) AS user_votes,
CASE 
WHEN @prevRank = id THEN @curRank 
WHEN @prevRank := id THEN @curRank := @curRank + 1
END AS rank
FROM cs_users AS u
LEFT JOIN cs_users_votes AS v 
ON u.userId = v.voteUserId

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM