Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Aktualisieren Sie eine Sortierindexspalte, um Elemente zu verschieben

Sie sollten dies in einer einzigen Abfrage tun können:etwas in der Art von UPDATE foo SET sort_index = sort_index + 1 WHERE bar_id == b AND sort_index < s1 AND sort_index >= s2 , wobei b ist die bar_id der zu verschiebenden Zeile, s1 ist der aktuelle sort_index dieser Zeile und s2 ist der sort_index Sie möchten es verschieben. Dann würden Sie einfach den sort_index ändern der Reihe.

Wahrscheinlich möchten Sie die beiden Abfragen innerhalb einer Transaktion durchführen. Außerdem kann es die Dinge beschleunigen, wenn Sie einen Index auf dem sort_index erstellen Verwenden Sie so etwas wie CREATE INDEX foo_index ON foo (sort_index) .

(Übrigens gehe ich hier davon aus, dass Sie keinen doppelten sort_index wollen Werte innerhalb einer bestimmten bar_id , und dass die relative Reihenfolge der Zeilen nur explizit geändert werden sollte. Wenn Sie dies nicht benötigen, ist die Lösung sogar noch einfacher.)