Du kan holde orden som bogstavelige ord og bruge leksikal sortering:
1. A
2. Z
Tilføj en opgave:
1. A
3. L
2. Z
Tilføj flere:
1. A
4. B
3. L
2. Z
Flyt 2 mellem 1 og 4:
1. A
2. AL
4. B
3. L
osv.
Du opdaterer kun én post ad gangen:tag blot et gennemsnitligt bogstav mellem de første, der adskiller sig:hvis du sætter mellem A og C , tager du B , hvis du sætter mellem ALGJ og ALILFG , tager du ALH .
Bogstav ved siden af eksisterende tæller som eksisterende sammenkædet med bogstavet ved siden af Z . Dvs. hvis du har brug for at sætte mellem ABHDFG og ACSD F, du tæller det som mellem ABH og AB(Z+) , og skriv AB(letter 35/2) , det er ABP .
Hvis du løber tør for strenglængde, kan du altid udføre en fuld genbestilling.
Opdatering:
Du kan også beholde dine data som en sammenkædet liste.
Se artiklen i min blog om, hvordan du gør det i MySQL :
I en nøddeskal:
/* 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 flytter elementerne, skal du højst opdatere 4 rækker.
Dette ser ud til at være den mest effektive måde at holde en ordnet liste, der opdateres ofte.