sql >> Database >  >> RDS >> Mysql

Hoe sla ik bestellingen op?

U kunt orders als letterlijke waarden behouden en lexicale sortering gebruiken:

1. A
2. Z

Een taak toevoegen:

1. A
3. L
2. Z

Voeg meer toe:

1. A
4. B
3. L
2. Z

Verplaats 2 tussen 1 en 4:

1. A
2. AL
4. B
3. L

enz.

U werkt slechts één record tegelijk bij:neem gewoon een gemiddelde letter tussen de eerste die verschillen:als u tussen A plaatst en C , neem je B , als je tussen ALGJ . plaatst en ALILFG , neem je ALH .

Letter naast bestaande telt als bestaand aaneengeschakeld met de letter naast Z . ik. e. als je tussen ABHDFG moet zetten en ACSD F, je telt het als tussen ABH en AB(Z+) , en schrijf AB(letter 35/2) , dat is ABP .

Als u geen string meer heeft, kunt u altijd een volledige herordening uitvoeren.

Bijwerken:

U kunt uw gegevens ook als een gelinkte lijst bewaren.

Zie het artikel in mijn blog over hoe je dit doet in MySQL :

In een notendop:

/* 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

Als je de items verplaatst, moet je maximaal 4 . updaten rijen.

Dit lijkt de meest efficiënte manier om een ​​geordende lijst bij te houden die regelmatig wordt bijgewerkt.



  1. Kan de FULLTEXT-index niet vinden die overeenkomt met de kolomlijst (indexen zijn ingesteld)

  2. Door komma's gescheiden waarden van een kolom in rij splitsen, via Oracle SQL-query

  3. mysql, transponeer/draai rij naar kolom, variabele selecties

  4. Meerdere variabelen doorgeven aan PHP met jQuery