codice:
id ordine nome
---------------------------------------------
1 1 Pippo
2 2 Pluto
# aggiungo Paperino
INSERT INTO tabella (ordine, nome) VALUES (SELECT MAX(ordine) + 1 FROM tabella, "Paperino")
# tabella dopo l'insert
1 1 Pippo
2 2 Pluto
3 3 Paperino
[ORDER BY ordine: Pippo, Pluto, Paperino]
# sposto Paperino (id 3) di uno sopra
SELECT ordine FROM tabella WHERE id = 3
if $ordine > 1
# caso in sui esiste un ordine precedente
UPDATE tabella SET ordine = ordine + 1 WHERE ordine = ordine - 1
UPDATE tabella SET ordine = ordine - 1 WHERE id = 3
else
# caso in cui ordine è il primo ... o non si fa niente, o si mette come ultimo ("salto della pila")
UPDATE tabella SET ordine = ordine - 1
UPDATE tabella SET ordine = (SELECT MAX(ordine) + 1 FROM tabella) WHERE id = 3
# tabella dopo l'update
1 1 Pippo
2 3 Pluto
3 2 Paperino
[ORDER BY ordine: Pippo, Paperino, Pluto]
# sposto Pippo (id 1) di uno sotto
SELECT ordine FROM tabella WHERE id = 1
SELECT MAX(ordine) FROM tabella
if $ordine < $MAX_ordine
# caso in sui esiste un ordine successivo
UPDATE tabella SET ordine = ordine - 1 WHERE ordine = ordine + 1
UPDATE tabella SET ordine = ordine + 1 WHERE id = 1
else
# caso in cui ordine è l'ultimo ... o non si fa niente, o si mette come primo ("salto della pila")
UPDATE tabella SET ordine = ordine + 1
UPDATE tabella SET ordine = 1 WHERE id = 1
# tabella dopo l'update
1 2 Pippo
2 3 Pluto
3 1 Paperino
[ORDER BY ordine: Paperino, Pippo, Pluto]
# elimino Pippo (id 1) dalla tabella
SELECT ordine FROM tabella WHERE id = 1
UPDATE tabella SET ordine = ordine - 1 WHERE ordine > $ordine
DELETE FROM tabella WHERE id = 1
# tabella dopo il delete
2 2 Pluto
3 1 Paperino
[ORDER BY ordine: Paperino, Pluto]