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.