Можете да поддържате поръчките като литерали и да използвате лексикално сортиране:
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
редове.
Това изглежда е най-ефективният начин за поддържане на подреден списък, който се актуализира често.