Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Atualize uma lista de coisas sem acertar todas as entradas


Suponha @old é o valor 4 para a antiga posição das maçãs e @new é a nova posição 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);

Eu usei o MySQL 5.1.52 para testar isso em seus dados de exemplo e funciona. O SQL idêntico também funciona se você precisar mover uma entrada inicial para mais tarde, ou mover uma no meio, etc. Basta definir os valores de @old e @new .