のテーブルがあります。AUTO_INCREMENT id
このテーブルにはparent_id
フィールドもあります。場合によっては、挿入データ自体が親であり、親を持たない場合、をparent_id
独自の ID と同じ値に設定する必要があります。
これは単一のSQLステートメントで可能ですか、LAST_INSERT_ID
それとも別の更新ステートメントを実行する必要がありますか?
ありがとう
あなたは別々のステートメントでしなければなりません。
ツリーシステムは通常、「0」を非父アイテムのルートまたは父、または第1レベルのアイテムの父と見なし、「0」はデータベースに存在しません。
このアイテムの親と同じIDを設定しないことをお勧めします。なぜなら...このアイテムは彼自身の父親ですか?あなたは本当にそれが必要ですか?
技術的には可能ですが、強くお勧めしません。このクエリが機能する唯一の方法は、レコードが削除されないことを保証できる場合です。それでも、使用しないでください。しかし、もしあなたがしなければならないなら...
INSERT INTO `table` (field1, field2, parent_id)
VALUES('data1', 'data2',
(SELECT id FROM (SELECT max(id) AS id FROM `table`) AS a) + 1
)
繰り返しますが、2 つのクエリで実行したほうがよいでしょう。存在する理由は、AI の仕組みです。最後のレコードが 20 で削除された場合、次のエントリは 21 になりますが、max(id)
19 と見なされるため、parent_id は 20 になります。
はい、できます。テーブルの次の auto_increment 値を取得するには、次のようにします。
SELECT AUTO_INCREMENT
FROM information_schema.TABLES
WHERE table_name='table_name'
AND table_schema='schema_name';
MAX
テーブルから最後の行を削除して最大値を計算すると、次の auto_increment 値が得られないため、 を使用しないでください。