Mysql
 sql >> Database >  >> RDS >> Mysql

Come conservo gli ordini?

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.