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).