一意の列「orderby」によって順序が維持される順序付きリストの中央にエントリを移動したいと思います。値をリストの中央に移動するときは、orderby値を指定します。値がすでに取得されている場合は、移動の方向に応じて、古い行のorderbyを1つインクリメントまたはデクリメントする必要があります。
テストの目的で、私はこのテーブルを持っています:
CREATE TABLE test(
orderby integer,
UNIQUE(orderby) )
そして、私は現在、次のトリガーを持っています:
CREATE TRIGGER [test_insert]
BEFORE UPDATE OF [orderby]
ON [test]
FOR EACH ROW
BEGIN
UPDATE test
SET orderby = orderby + 1
WHERE NEW.orderby = orderby;
END
ただし、これは、トリガーによって作成されたorderby値が使用されていない場合にのみ機能します。
つまり、を実行するUPDATE test SET orderby = 2 WHERE orderby = 1
と、orderby値が{1のテーブルで機能します。2}ですが、値が{1;のテーブルではありません。2; 3}
どうすればこれを解決できますか?それとも完全に違うのでしょうか?
編集:これを機能させることができない場合は、範囲内のすべてのorderby-sをインクリメントするオプションが常にあると思いますが、それでもこれを機能させたいので、値またはorderbyのギャップを使用できますより効率的になります。