2012-07-06 19 views
5

dire che ho un tavolocampo di ordinamento mysql valore di incremento

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

Grado 2 è mancante, potrebbe essere stato cancellato o qualsiasi altra cosa. Ho bisogno di una query per incrementare il campo di classifica. Quindi John sarebbe il numero 1, ma Tit ora sarebbe il numero 2 e Bernard 3.

Ci possono essere ovunque fino a 100 gradi e diversi mancanti. Finché il rango più piccolo viene reimpostato sul numero 1 e tutti gli incrementi successivi, dovrebbe essere buono.

Qualche idea?

Una query per aggiornare il campo di classifica.

risposta

2

Puoi farlo senza dover utilizzare variabili esterne:

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 
Problemi correlati