Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como armazeno os pedidos?


Você pode manter as ordens como literais e usar a classificação léxica:
1. A
2. Z

Adicione uma tarefa:
1. A
3. L
2. Z

Adicione mais:
1. A
4. B
3. L
2. Z

Mova 2 entre 1 e 4:
1. A
2. AL
4. B
3. L

etc.

Você atualiza apenas um registro por vez:basta pegar uma letra média entre as primeiras que diferem:se você colocar entre A e C , você pega B , se você colocar entre ALGJ e ALILFG , você pega ALH .

Letra ao lado de existente conta como existente concatenada com a ao lado de Z . I. e. se você precisar colocar entre ABHDFG e ACSD F, você conta como entre ABH e AB(Z+) , e escreva AB(letter 35/2) , que é ABP .

Se o comprimento da string acabar, você sempre poderá realizar uma reordenação completa.

Atualização:

Você também pode manter seus dados como uma lista vinculada.

Veja o artigo no meu blog sobre como fazer isso em MySQL :

Em poucas palavras:
/* 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

Ao mover os itens, você precisará atualizar no máximo 4 linhas.

Essa parece ser a maneira mais eficiente de manter uma lista ordenada e atualizada com frequência.