Puoi mantenere gli ordini come letterali e utilizzare l'ordinamento lessicale:
1. A
2. Z
Aggiungi un'attività:
1. A
3. L
2. Z
Aggiungi altro:
1. A
4. B
3. L
2. Z
Sposta 2 tra 1 e 4:
1. A
2. AL
4. B
3. L
ecc.
Aggiorna solo un record alla volta:prendi una lettera media tra i primi che differiscono:se metti tra A
e C
, prendi B
, se inserisci tra ALGJ
e ALILFG
, prendi ALH
.
La lettera accanto all'esistente conta come esistente concatenata con quella accanto a Z
. Cioè. se hai bisogno inserisci tra ABHDFG
e ACSD
F, lo conti come tra ABH
e AB(Z+)
e scrivi AB(letter 35/2)
, ovvero ABP
.
Se esaurisci la lunghezza della stringa, puoi sempre eseguire un riordino completo.
Aggiornamento:
Puoi anche conservare i tuoi dati come un elenco collegato.
Vedi l'articolo nel mio blog su come farlo in MySQL
:
In poche parole:
/* This just returns all records in no particular order */
SELECT *
FROM t_list
id parent
------- --------
1 0
2 3
3 4
4 1
/* This returns all records in intended order */
SELECT @r AS _current,
@r := (
SELECT id
FROM t_list
WHERE parent = _current
)
FROM (
SELECT @r := 0
) vars,
t_list
_current id
------- --------
0 1
1 4
4 3
3 2
Quando sposti gli articoli, dovrai aggiornare al massimo 4
righe.
Questo sembra essere il modo più efficiente per mantenere un elenco ordinato che viene aggiornato frequentemente.