mysql基于用户id的排名系统

时间:2013-02-08 05:00:44

标签: mysql system ranking

我对最初来自http://jimmod.com/blog/2008/09/displaying-row-number-rownum-in-mysql/

的查询有疑问
SELECT IF(@points=p.points, @rownum, @rownum:=@rownum+1) rank, 
       p.*, (@points:=p.points) dummy 
FROM `ranking` p, (SELECT @rownum:=0) x, (SELECT @points:=0) y 
ORDER BY `points` DESC

查询结果为:

rank user_id name score
-----------------------
1      4    Barney  100
2      2    Ted      88
3      1    Marshall 76
3      3    Robin    76
4      5    Lily     68

如何根据用户ID获得相同的排名结果?

下面的查询是基于用户ID,但Robin的等级将是4,而不是3应该是。

SELECT rank FROM (SELECT @rownum:=@rownum+1 rank, p.* 
FROM `ranking` p, (SELECT @rownum:=0) r 
ORDER BY `points` DESC) a WHERE a.user_id = 3

1 个答案:

答案 0 :(得分:1)

如果没有测试它,看起来这应该使用子查询:

SELECT rank
FROM (
    SELECT IF(@points=p.points, @rownum, @rownum:=@rownum+1) rank, 
       p.*, (@points:=p.points) dummy 
    FROM `ranking` p, (SELECT @rownum:=0) x, (SELECT @points:=0) y 
    ORDER BY `points` DESC
) t
WHERE user_id = 3

上面的查询显示4,因为你没有使用RANK,而只是ROW NUMBER,Robin出现在Marshall之后(即使他们有相同的分数)。

祝你好运。