2012-08-31 10 views
6

ich eine Tabelle Benutzer habe:MySQL wählen Benutzer-Ort

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

Wie ich Benutzer-Platz Bestellung nach Bewertung auswählen kann, wo id = N und dass die Nutzer mit ähnlicher Bewertung die gleiche Stelle in der Spitze haben?

UPD: Ich möchte Ausgabe:

Wenn userid = 1, seine rank is 2, wenn userid = 2, seine rank is 5, wenn userid = 3, rank is 1 ... Aber wenn userid = 4 oder 6 ihre rank are 4 weil Raten ähnlich sind.

+1

können Sie sich hier zeigen, was ist ur erwartete Ausgabe? – AnandPhadke

Antwort

4

Ich glaube, Sie bei der Bewertung für asll user_id's` finden wollen:

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; 

Beispiel @sqlfiddle

Wenn Sie die Reihenfolge der Einträge in der Ausgabe ändern möchten dann dies nicht versuchen:

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 will für eine gegebene Benutzer-ID finden, was seinen Rang in Rating-System – AnandPhadke

+0

ohh ok..thanks! Meine Antwort wurde aktualisiert. – Omesh

+0

Großartig! Ich danke dir sehr! – Isis

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