Antag @old
er værdien 4 for æblers gamle position og @new
er den nye stilling 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);
Jeg brugte MySQL 5.1.52 til at teste dette på dine eksempeldata, og det virker. Den identiske SQL fungerer også, hvis du har brug for at flytte en tidlig post til at være senere, eller flytte en i midten osv. Du skal blot indstille værdierne for @old
og @new
.