順序をリテラルとして保持し、字句ソートを使用できます:
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
など
一度に更新するレコードは1つだけです。異なる最初のレコードの間で平均的な文字を取得するだけです。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
を更新する必要があります 行。
これは、頻繁に更新される順序付きリストを保持するための最も効率的な方法のようです。