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