2012-08-31 14 views
6

Tôi có một người sử dụng bảng:MySQL chọn của người dùng

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

Làm thế nào tôi có thể lựa chọn của người dùng nơi đặt hàng theo thứ hạng nơi id = N và rằng người dùng với giá tương tự có cùng một vị trí trong top?

UPD: Tôi muốn đầu ra:

Nếu userid = 1, ông rank is 2, nếu userid = 2, ông rank is 5, nếu userid = 3, rank is 1 ... Nhưng nếu userid = 4 hoặc 6 họ rank are 4 vì giá đều là giống nhau.

+1

bạn có thể hiển thị ở đây sản lượng mong đợi là gì? – AnandPhadke

Trả lời

4

Tôi nghĩ rằng bạn muốn tìm những đánh giá cho user_id's` asll:

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; 

Ví dụ @sqlfiddle

Nếu bạn không muốn thay đổi thứ tự của các bản ghi trong đầu ra sau đó thử này:

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 muốn một id người dùng nhất định tìm thấy thứ hạng của anh ấy trong hệ thống xếp hạng – AnandPhadke

+0

ohh ok..thanks! Đã cập nhật câu trả lời của tôi. – Omesh

+0

Tuyệt vời! Cảm ơn bạn rất nhiều! – Isis

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