0

のテーブルがあります。AUTO_INCREMENT idこのテーブルにはparent_idフィールドもあります。場合によっては、挿入データ自体が親であり、親を持たない場合、をparent_id独自の ID と同じ値に設定する必要があります。

これは単一のSQLステートメントで可能ですか、LAST_INSERT_IDそれとも別の更新ステートメントを実行する必要がありますか?

ありがとう

4

3 に答える 3

0

あなたは別々のステートメントでしなければなりません。

ツリーシステムは通常、「0」を非父アイテムのルートまたは父、または第1レベルのアイテムの父と見なし、「0」はデータベースに存在しません。

このアイテムの親と同じIDを設定しないことをお勧めします。なぜなら...このアイテムは彼自身の父親ですか?あなたは本当にそれが必要ですか?

于 2012-08-08T14:56:55.587 に答える
0

技術的には可能ですが、強くお勧めしません。このクエリが機能する唯一の方法は、レコードが削除されないことを保証できる場合です。それでも、使用しないでください。しかし、もしあなたがしなければならないなら...

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 になります。

于 2012-08-08T15:05:16.593 に答える
0

はい、できます。テーブルの次の auto_increment 値を取得するには、次のようにします。

SELECT AUTO_INCREMENT 
FROM information_schema.TABLES 
WHERE table_name='table_name' 
AND table_schema='schema_name';

MAXテーブルから最後の行を削除して最大値を計算すると、次の auto_increment 値が得られないため、 を使用しないでください。

于 2012-08-08T15:07:45.713 に答える