Du bör kunna göra detta i en enda fråga:något i stil med UPDATE foo SET sort_index = sort_index + 1 WHERE bar_id == b AND sort_index < s1 AND sort_index >= s2
, där b
är bar_id
för raden som ska flyttas, s1
är det nuvarande sort_index
av den raden och s2
är sort_index
du vill flytta den till. Sedan skulle du bara ändra sort_index
i raden.
Du skulle förmodligen vilja göra de två frågorna i en transaktion. Dessutom kan det påskynda saker och ting om du skapade ett index på sort_index
med något som CREATE INDEX foo_index ON foo (sort_index)
.
(Förresten, här antar jag att du inte vill ha dubbletter av sort_index
värden inom en given bar_id
, och att den relativa ordningen för rader aldrig bör ändras utom uttryckligen. Om du inte behöver detta är lösningen ännu enklare.)