2012-08-31 14 views
6

Mam użytkowników tabeli:MySQL Wybierz użytkownika za

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

Jak mogę wybrać użytkownika kolejność wg rankingu miejsce gdzie id = N że użytkownicy o podobnym ratingu mają to samo miejsce na szczycie?

UPD: Chcę wyjścia:

Jeśli userid = 1, jego rank is 2, jeśli userid = 2, jego rank is 5, jeśli userid = 3, rank is 1 ... Ale jeśli userid = 46 lub ich rank are 4 ponieważ stawki są podobne.

+1

można tu pokazać co jest ur spodziewane wyjście? – AnandPhadke

Odpowiedz

4

myślę chcesz znaleźć rating dla 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; 

Przykład @sqlfiddle

Jeśli nie chcesz, aby zmienić kolejność rekordów w wyjściu następnie spróbuj tego:

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 chce dla danego id użytkownika znaleźć whats swoją pozycję w rankingu systemu – AnandPhadke

+0

ohh ok..dzięki! Zaktualizowałem moją odpowiedź. – Omesh

+0

Świetnie! Dziękuję bardzo! – Isis

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