sql >> Databasteknik >  >> RDS >> Mysql

Hur lagrar jag beställningar?

Du kan hålla ordningar som bokstavliga ord och använda lexikal sortering:

1. A
2. Z

Lägg till en uppgift:

1. A
3. L
2. Z

Lägg till fler:

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

Flytta 2 mellan 1 och 4:

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

etc.

Du uppdaterar bara en post åt gången:ta bara en genomsnittlig bokstav mellan de första som skiljer sig:om du sätter mellan A och C , tar du B , om du lägger mellan ALGJ och ALILFG , tar du ALH .

Bokstaven bredvid befintliga räknas som befintlig sammanlänkade med den bredvid Z . Dvs. om du behöver lägga mellan ABHDFG och ACSD F, du räknar det som mellan ABH och AB(Z+) , och skriv AB(letter 35/2) , det vill säga ABP .

Om du får slut på stränglängd kan du alltid utföra en fullständig omordning.

Uppdatering:

Du kan också behålla din data som en länkad lista.

Se artikeln i min blogg om hur du gör det i MySQL :

I ett nötskal:

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

När du flyttar objekten behöver du som mest uppdatera 4 rader.

Detta verkar vara det mest effektiva sättet att hålla en ordnad lista som uppdateras ofta.



  1. SQL Server - IN-klausul med flera fält

  2. Behöver hjälp med att optimera en lat/Lon geo-sökning för mysql

  3. Minska minnesförbrukningen för mysql på [email protected] mikroinstanser

  4. Användning av MySQL:s IF FINNS