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