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.