Du burde være i stand til at gøre dette i en enkelt forespørgsel:noget i stil med UPDATE foo SET sort_index = sort_index + 1 WHERE bar_id == b AND sort_index < s1 AND sort_index >= s2
, hvor b
er bar_id
af rækken, der skal flyttes, s1
er den aktuelle sort_index
af denne række og s2
er sort_index
du vil flytte den til. Derefter skal du bare ændre sort_index
af rækken.
Du vil sikkert gerne lave de to forespørgsler i en transaktion. Det kan også fremskynde tingene, hvis du oprettede et indeks på sort_index
ved at bruge noget som CREATE INDEX foo_index ON foo (sort_index)
.
(Forresten, her går jeg ud fra, at du ikke vil have duplikat sort_index
værdier inden for en given bar_id
, og at den relative rækkefølge af rækker aldrig bør ændres undtagen eksplicit. Hvis du ikke har brug for dette, er løsningen endnu enklere.)