2012-11-15 37 views

回答

2

你确定你的给定查询甚至可以正常工作我记得ORDER BY要在SELECT之后完成,因此使您的排名按ID ASC排序或类似。

SELECT user_id, 
    CASE WHEN @score != score THEN @rank := @rank + 1 ELSE @rank END AS rank, 
    @score := score AS dummy_value 
FROM ( SELECT score, user_id 
     FROM site_crossword_members, 
      (SELECT @rank := 0, @score := NULL) AS vars 
     ORDER BY score DESC) AS h 

缩短版本:

SELECT user_id, 
    @rank := @rank + (@score != score) AS rank, 
    @score := score AS dummy_value 
FROM ( SELECT score, user_id 
     FROM site_crossword_members, 
      (SELECT @rank := 0, @score := NULL) AS vars 
     ORDER BY score DESC) AS h 
+0

这个答案是正确的 –

2

尝试此查询(用变量版本) -

SET @rank = 0; 
SET @score = NULL; 

SELECT 
    rank, score, user_id 
FROM (
    SELECT 
    score, 
    user_id, 
    IF(@score = score, @rank := @rank + 1, @rank := 1) AS rank, 
    @score := score 
    FROM site_crossword_members 
    ORDER BY score DESC 
) t; 
+0

我很抱歉,这个答案是不正确 –

+0

是什么不正确的? – Devart

+0

这个问题可以阅读几个说。你的作品需要根据新的分数重新排列等级,但他希望得分相同的人分享等级。 –