2012-08-31 20 views
6

Tengo tabla de usuarios:de selección del usuario

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

¿Cómo puedo seleccionar el lugar de pedido del usuario por calificación donde id = N y que los usuarios con calificación similar tienen el mismo lugar en la parte superior?

UPD: Quiero salida:

Si userid = 1, su rank is 2, si userid = 2, su rank is 5, si userid = 3, rank is 1, ... Pero si userid = 46 o su rank are 4 porque las tasas son similares.

+1

puedo mostrar aquí lo que es ur salida esperada? – AnandPhadke

Respuesta

4

creo que usted quiere encontrar la calificación para 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; 

Ejemplo @sqlfiddle

Si no desea cambiar el orden de los registros en la salida a continuación, intente esto:

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 quiere para un ID de usuario dado encontrar cuál es su rango en el sistema de clasificación – AnandPhadke

+0

ohh ok..gracias! Actualizado mi respuesta. – Omesh

+0

¡Genial! Muchas gracias! – Isis

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