MySQL如何通过投票金额获得用户排名

时间:2015-02-26 07:36:33

标签: php mysql

我有两张桌子。一个用户"和一个"投票",每个用户可以有n票。现在我选择一个用户列表并输出它。 它在LEFT JOIN中作为COUNT投票很好,但现在我想计算用户的RANK(第1,第2,第3,......)。

使用ORDER BY Votes理论上非常容易,但我也允许我的用户按用户日期排序(当他们加入时)。我的查询中也有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等)

希望你能帮忙!

1 个答案:

答案 0 :(得分:0)

好吧,要计算排名,你可以使用找到的排名功能here 它将对每个用户进行排名,同时考虑结果关系。如果添加分页,可能会尝试递归传递上一页的结果。

至于功能本身

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