リレーショナルデータベースにデータの継承順序はありません。あなたはそれがあなたのようなことで注文したいということであるフィールドを指定する必要があります。レコードがテーブルに書き込まれる順序に依存
INSERT INTO table2
SELECT *
FROM table1
WHERE column1=smth
ORDER BY <field to sort by here>
LIMIT 1;
は非常に悪い考えです。 id
がtable1
にある場合は、ORDER BY id DESC LIMIT 1
を使用して、降順でIDで結果セットをソートし、最後のものを選択してください。
は、MySQLによると、OPの質問について
mysqli_insert_id
に対処するために更新された参照ここで呼び出された関数は、それが述べlast_insert_id()
次のとおりです。
重要あなたは、単一のINSERT文を使用して複数の行を挿入した場合、 LAST_INSERT_ID()は、最初に挿入された 行のみに対して生成された値を返します。これは、他のサーバに対して簡単に同じINSERT文を再現できるようにするためです。
残念ながら、真の「最後に挿入されたID」を取得するには、2番目のクエリを実行する必要があります。あなたの最善の策は、SELECT COUNT(*) FROM table1 WHERE column1=smth;
を実行し、そのcount(*)
の返信を使用してmysqli_insert_id
の値に加算することです。これは素晴らしいことではありませんが、この機能が大ヒットしているボリュームが高い場合は、これがおそらく最も安全なルートです。
安全性の低いルートは、SELECT max(id) FROM table2
またはSELECT max(id) FROM table2 Where column1=smth
です。しかし、再び、あなたのキーとこのインサートがヒットしている回数によっては、これは危険かもしれません。
データベース構造、サンプルデータ、およびPHPコードについて何も共有していないと、これは答えることができません。最初は、AUTO_INCREMENTを一切取得しないようにしてください。なぜなら、空白を残していないように見えるからです。 –
mysqli_insert_id()は、あなたにとって1つのid値しか与えません。マルチレコード挿入からIDを取得することはできません。 IDが必要な場合は、単一/個別の挿入とlast_insert_id()を1つずつ実行します。 –