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