Du behöver dela in en förflyttning i flera mindre steg:
låt oss ta ett exempel:
Du har en lista med:
Prio, Namn
1, Kalle
2, Olle
3, Greta
4, Lena
5, Hanna
6, Torkel
Om du nu vill flytta raden 5, Hanna till position 2 och flytat ned alla som idag har 2 ett steg så kan du göra så här:
Steg 1:
Ta posten 5, Hanna och ändra prio till 999, Hanna
Prio, Namn
1, Kalle
2, Olle
3, Greta
4, Lena
6, Torkel
999, Hanna
Steg 2:
Öka värdet på alla pri som är i intervalet 2-4 med 1
Prio, Namn
1, Kalle
3, Olle
4, Greta
5, Lena
6, Torkel
999, Hanna
Steg 3:
Ändra prio 999 till 2
Prio, Namn
1, Kalle
2, Hanna
3, Olle
4, Greta
5, Lena
6, Torkel
Klart!
I SQL skulle du mao behöva göra 3 olika update-satser:
Kod:
UPDATE tbl SET prio=999 WHERE prio=5;
UPDATE tbl SET prio=prio+1 WHERE prio>=2 AND prio<5;
UPDATE tbl SET prio=2 WHERE prio=999;
En datalj i sammanhanget kanske men du kan ju välja att ha en mellanlagringsstatus på 0 i stället för 999 om det blir enklare.