sql >> Database >  >> RDS >> Mysql

Werk een lijst met dingen bij zonder elk item te raken

Stel dat @old is de waarde 4 voor de oude positie van appels, en @new is de nieuwe positie 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);

Ik heb MySQL 5.1.52 gebruikt om dit te testen op uw voorbeeldgegevens en het werkt. De identieke SQL werkt ook als u een vroege invoer naar later moet verplaatsen, of een in het midden, enz. Stel gewoon de waarden van @old in en @new .



  1. PHP MySQL krijgt locaties in de straal van de locatie van de gebruiker van GPS

  2. Methoden voor prestatietests:een nieuwe manier ontdekken

  3. Geef elke DISTINCT-veldwaarde slechts één keer weer met lus

  4. Waarom registreert het aanroepen van Class.forName(com.mysql.jdbc.Driver) de MySQL voor JDBC?