2012-08-31 22 views
6

我有一個表的用戶:MySQL的選擇用戶的地方

id | rating 
1  4 
2  -1 
3  12 
4  0 
5  2 
6  0 

如何選擇由等級用戶的位置順序,其中id = N和用戶提供類似的評價在頂部的同一個地方?

UPD:我想輸出:

如果userid = 1,他rank is 2,如果userid = 2,他rank is 5,如果userid = 3rank is 1 ... 但如果userid = 46他們rank are 4因爲利率是相似的。

+1

你能在這裏顯示什麼是你的預期輸出? – AnandPhadke

回答

4

我想你要查找的評級asll user_id's`:

SELECT id, 
     IF(rating <> @var_rating_prev, (@var_rank:= @var_rank + 1), @var_rank) AS rank, 
     (@var_rating_prev := rating) AS rating 
FROM table_name a,(SELECT @var_rank := 0, @var_rating_prev := 0) r 
ORDER BY rating DESC; 

例@sqlfiddle

如果你不想改變輸出記錄的順序,然後試試這個:

SELECT a.*, b.rank 
FROM test_table a 
    INNER JOIN (
      SELECT id, 
        IF(rating <> @var_rating_prev, (@var_rank:= @var_rank + 1), @var_rank) AS rank, 
        (@var_rating_prev := rating) AS rating 
      FROM test_table a,(SELECT @var_rank := 0, @var_rating_prev := 0) r 
      ORDER BY rating DESC 
     ) b 
     ON a.id = b.id 
ORDER BY a.id; 
+2

OP想要一個給定的用戶ID找到什麼他的評級系統排名 – AnandPhadke

+0

哦OK ..謝謝!更新了我的答案。 – Omesh

+0

太棒了!非常感謝! – Isis

2
SELECT COUNT(*)+1 `rank` 
FROM table_name 
WHERE rating > (SELECT rating 
       FROM table_name 
       WHERE id = N)