Misalkan @old
adalah nilai 4 untuk posisi lama apel, dan @new
adalah posisi baru 1.
set @old = 4;
set @new = 1;
UPDATE Items
SET `order value` =
CASE `order value` WHEN @old THEN @new
ELSE `order value` + SIGN(@[email protected]) END
WHERE `order value` BETWEEN LEAST(@old, @new) AND GREATEST(@old, @new);
Saya menggunakan MySQL 5.1.52 untuk menguji ini pada data contoh Anda dan berhasil. SQL yang sama juga berfungsi jika Anda perlu memindahkan entri awal ke yang lebih baru, atau memindahkan satu di tengah, dll. Cukup atur nilai @old
dan @new
.