Можете да поддържате поръчките като литерали и да използвате лексикално сортиране:
1. A
2. Z
Добавете задача:
1. A
3. L
2. Z
Добавете още:
1. A
4. B
3. L
2. Z
Преместете 2 между 1 и 4:
1. A
2. AL
4. B
3. L
и др.
Актуализирате само един запис наведнъж:просто вземете средна буква между първите, които се различават:ако поставите между A и C , приемате B , ако поставите между ALGJ и ALILFG , приемате ALH .
Буквата до съществуващите се счита за съществуваща, свързана с тази до Z . I. e. ако трябва да поставите между ABHDFG и ACSD F, отчитате го като между ABH и AB(Z+) и напишете AB(letter 35/2) , което е ABP .
Ако дължината на низа ви свърши, винаги можете да извършите пълно пренареждане.
Актуализация:
Можете също да запазите данните си като свързан списък.
Вижте статията в моя блог за това как да го направите в MySQL :
Накратко:
/* 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
Когато премествате елементите, ще трябва да актуализирате най-много 4 редове.
Това изглежда е най-ефективният начин за поддържане на подреден списък, който се актуализира често.