2012-08-31 13 views
6

Ho un tavolo utenti:MySQL selezionare dell'utente

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

Come posso selezionare il posto di utente ordinazione rating dove id = N e che gli utenti con rating simili hanno lo stesso posto nella top?

UPD: Voglio uscita:

Se userid = 1, il suo rank is 2, se userid = 2, il suo rank is 5, se userid = 3, rank is 1, ... Ma se userid = 4 o 6 loro rank are 4 perché i tassi sono simili.

+1

si può mostrare qui ciò che è ur uscita prevista? – AnandPhadke

risposta

4

Penso che si desidera trovare il voto per 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; 

Esempio @sqlfiddle

Se non si desidera cambiare l'ordine dei record in uscita quindi provare questo:

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 vuole per un dato id utente trovare che cosa è il suo grado nel sistema di valutazione – AnandPhadke

+0

ohh ok..grazie! Aggiornato la mia risposta. – Omesh

+0

Grande! Grazie mille! – Isis

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