2012-07-06 11 views
5

Decir que tengo una tablamysql valor de incremento campo de clasificación

name    rank 
----------------------- 
John    1 
Tit    3 
Bernard   4 

Rango 2 no se encuentra, se podrían haber eliminado o lo que sea. Necesito una consulta para incrementar el campo de rango. Entonces Juan sería el número 1, pero Tit sería ahora el número 2, y Bernard 3.

Podría haber hasta 100 rangos, y faltan varios. Siempre y cuando el rango más pequeño se restablezca al número 1, y todo lo que sigue incremente, debería ser bueno.

¿Alguna idea?

Una consulta para actualizar el campo de rango.

Respuesta

6

Esto actualizará el campo rango de modo que se incrementa sin agujeros:

SET @i := 0; 
UPDATE tbl SET rank = @i:[email protected]+1 ORDER BY rank; 
+0

agradecimiento que estaba cerca :) – user1022585

2

Puede hacerlo sin tener que utilizar las variables externas:

UPDATE tbl a 
INNER JOIN 
(
    SELECT a.name, a.rank, COUNT(*) AS newrank 
    FROM tbl a 
    INNER JOIN tbl b ON a.rank >= b.rank 
    GROUP BY a.rank 
) b ON a.name = b.name AND a.rank = b.rank 
SET a.rank = b.newrank 
Cuestiones relacionadas