Anda harus dapat melakukan ini dalam satu kueri:sesuatu di sepanjang baris UPDATE foo SET sort_index = sort_index + 1 WHERE bar_id == b AND sort_index < s1 AND sort_index >= s2 , di mana b adalah bar_id dari baris yang akan dipindahkan, s1 adalah sort_index current saat ini dari baris itu, dan s2 adalah sort_index Anda ingin memindahkannya ke. Kemudian, Anda tinggal mengubah sort_index baris.
Anda mungkin ingin melakukan dua kueri di dalam transaksi. Juga, mungkin mempercepat jika Anda membuat indeks pada sort_index menggunakan sesuatu seperti CREATE INDEX foo_index ON foo (sort_index) .
(Omong-omong, di sini saya berasumsi bahwa Anda tidak ingin duplikat sort_index nilai dalam bar_id yang diberikan , dan bahwa urutan relatif baris tidak boleh diubah kecuali secara eksplisit. Jika Anda tidak membutuhkan ini, solusinya bahkan lebih sederhana.)