我对最初来自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
答案 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之后(即使他们有相同的分数)。
祝你好运。