Je zou dit in een enkele query moeten kunnen doen:iets in de trant van UPDATE foo SET sort_index = sort_index + 1 WHERE bar_id == b AND sort_index < s1 AND sort_index >= s2
, waarbij b
is de bar_id
van de te verplaatsen rij, s1
is de huidige sort_index
van die rij, en s2
is de sort_index
waarnaar u het wilt verplaatsen. Dan verander je gewoon de sort_index
van de rij.
U wilt waarschijnlijk de twee query's binnen een transactie uitvoeren. Het kan ook de zaken versnellen als u een index maakt op de sort_index
met iets als CREATE INDEX foo_index ON foo (sort_index)
.
(Trouwens, hier ga ik ervan uit dat je geen dubbele sort_index
wilt hebben waarden binnen een gegeven bar_id
, en dat de relatieve volgorde van rijen nooit mag worden gewijzigd, behalve expliciet. Als je dit niet nodig hebt, is de oplossing nog eenvoudiger.)