ネストされたセットをmysqlに保存しています。
次の動的 SQL を使用してノードを挿入します。
SELECT @myLeft := lft
FROM t
WHERE id = ?;
UPDATE t
SET rgt = rgt + 2
WHERE rgt > @myLeft;
UPDATE t
SET lft = lft + 2
WHERE lft > @myLeft;
INSERT INTO t
( title, lft, rgt )
VALUES ( "New", @myLeft + 1, @myLeft + 2 );
これはうまくいきます。ただし、最初の SELECT が結果を返さない場合、階層が破損するという潜在的な問題があります。これをトランザクションにラップしても、これを防ぐことはできません。
最初の SELECT ステートメントが結果を返す場合にのみ UPDATE および INSERT ステートメントが実行されるようにするにはどうすればよいですか? (可能であれば、これを完全にSQLで行うことを本当に望んでいます。)
(事前に)ご協力いただきありがとうございます。