0

「location」テーブルと「location_detail」[異なる言語データを挿入するための] テーブルがあります。「location_detail」にはロケーション テーブルの FK が含まれます

一度に複数の場所を入力する必要があります。だから私がやっていることは次のとおりです。

その中で「for」ループを実行し、最初に「location」テーブルにデータを入力し、loc_id を取得してから location_detail テーブルに挿入します [複数の言語が存在する場合は、ここで「location_detail」テーブルに、もう一度クエリを複数回実行したい]。

したがって、3 つの場所を追加したい場合 -> 外側の 'for' ループは、クエリ実行の合計数の 3 回実行されます。is 6 [複数の言語が存在する場合、これは複数になります]

==>私の目的は、単一のステートメントで複数の挿入を使用して、3つすべての(たとえば)場所を「場所」テーブルに挿入し、3つすべてのlast_insert_idを取得することです。

==>次に、「location_details」テーブルに追加するための単一ステートメントの複数の挿入クエリを実行できます

ここで、この last_insert_ids を配列で取得するにはどうすればよいでしょうか?

4

2 に答える 2

0

同じトランザクション/接続でこれを行います:

INSERT INTO location (col1, col2) VALUES (val1a, val2a); 
SET @string_ids = LAST_INSERT_ID();

INSERT INTO location (col1, col2) VALUES (val1b, val2b); 
SET @string_ids = CONCAT(@string_ids , ",", LAST_INSERT_ID());

INSERT INTO location (col1, col2) VALUES (val1c, val2c); 
SET @string_ids = CONCAT(@string_ids , ",", LAST_INSERT_ID());

SELECT @string_ids ;

次に、php で、この変数を展開します。

$array_ids = explode (",", $string_ids ).

次に、 php を使用してリクエストを作成します。

INSERT INTO location_detail(id, fk_id) VALUES 
//foreach loop
     (val_id1b, $array_ids[$i] )
     (val_id2b, $array_ids[$i] )
     (val_id3b, $array_ids[$i] )

私は試していませんが、うまく@array_idsいくはずです。

必要な場合は、このリンクを参照してください。

あなたのニーズに合うことを願っています。

于 2013-12-16T13:26:40.583 に答える
-2

transaction を使用して last_insert_id を取得し、AUTO_INCREMENT 設定に関連する以前の ID を計算できます。

Important
If you insert multiple rows using a single INSERT statement, LAST_INSERT_ID() returns the value generated for the first inserted row only. The reason for this is to make it possible to reproduce easily the same INSERT statement against some other server.

最後の挿入 IDドキュメントから。

于 2013-12-16T13:23:13.670 に答える