我有两张桌子。一个用户"和一个"投票",每个用户可以有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等)
希望你能帮忙!
答案 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