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.