Да предположим, че @old
е стойността 4 за старата позиция на ябълките и @new
е новата позиция 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);
Използвах MySQL 5.1.52, за да тествам това върху вашите примерни данни и работи. Идентичният SQL работи и ако трябва да преместите ранен запис, за да бъде по-късен, или да преместите един в средата и т.н. Просто задайте стойностите на @old
и @new
.