[英]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.