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.