sql >> Base de Datos >  >> RDS >> Mysql

Actualice una columna de índice de clasificación para mover elementos

Debería poder hacer esto en una sola consulta:algo similar a UPDATE foo SET sort_index = sort_index + 1 WHERE bar_id == b AND sort_index < s1 AND sort_index >= s2 , donde b es el bar_id de la fila a mover, s1 es el sort_index actual de esa fila, y s2 es el sort_index al que desea moverlo. Luego, simplemente cambiaría el sort_index de la fila.

Probablemente querrá hacer las dos consultas dentro de una transacción. Además, podría acelerar las cosas si crea un índice en el sort_index usando algo como CREATE INDEX foo_index ON foo (sort_index) .

(Por cierto, asumo que no desea duplicar sort_index valores dentro de un bar_id dado , y que el orden relativo de las filas nunca debe cambiarse excepto explícitamente. Si no necesita esto, la solución es aún más simple).