我在MYSQL中有2個具有相似列的表。我用INSERT INTO table2 SELECT * FROM table1 WHERE column1=smth
將數據從一個拷貝到另一個。我有不同的列作爲autoincrement和KEY在表中。當我使用mysqli_insert_id
時,我得到的是第一個,而不是最後一個插入的。有沒有辦法得到最後一個?INSERT INTO表SELECT沒有給出正確的last_id
謝謝
我在MYSQL中有2個具有相似列的表。我用INSERT INTO table2 SELECT * FROM table1 WHERE column1=smth
將數據從一個拷貝到另一個。我有不同的列作爲autoincrement和KEY在表中。當我使用mysqli_insert_id
時,我得到的是第一個,而不是最後一個插入的。有沒有辦法得到最後一個?INSERT INTO表SELECT沒有給出正確的last_id
謝謝
關係數據庫中沒有數據的繼承順序。您必須指定是哪個字段您希望通過像訂購:
INSERT INTO table2
SELECT *
FROM table1
WHERE column1=smth
ORDER BY <field to sort by here>
LIMIT 1;
依託一個記錄寫入到一個表是一個非常糟糕的主意的順序。如果在table1
上有一個自動編號的id
,那麼只需使用ORDER BY id DESC LIMIT 1
按ID降序排列結果集並選擇最後一個。
更新,以解決OP的問題有關mysqli_insert_id
據MySQL參考這裏調用的函數是last_insert_id()
它指出:
重要如果您插入使用一個INSERT語句多行, LAST_INSERT_ID()返回針對第一插入 僅行生成的值。這樣做的原因是可以輕鬆地再現 針對其他服務器的相同INSERT語句。
不幸的是,你必須做第二次查詢才能得到真正的「最後插入的ID」。你最好的辦法可能是運行一個SELECT COUNT(*) FROM table1 WHERE column1=smth;
,然後用count(*)
返回來增加mysqli_insert_id
的值。這並不是很好,但如果你的這個功能受到很大打擊,那麼這可能是最安全的路線。
不太安全的路線是SELECT max(id) FROM table2
或SELECT max(id) FROM table2 Where column1=smth
。但是......再次,取決於你的鑰匙和插入次數的增加,這可能是有風險的。
對不起,我想我不是很清楚。問題是SELECT位返回一些記錄,當這些記錄被添加到table2中時,mysqli_insert_id返回第一個自動識別的ID。所以,如果讓我們說,從表1中選擇3個記錄,將它們插入到表2和爲他們創造的ID 4,5,6 - mysqli_insert_id將返回4,而不是6 – user3195616
疑難雜症!我總是沉浸在這裏最低的共同標準。我已經回答了足夠多的問題,其中有人依賴InnoDB中的記錄順序,我只是假設這意味着什麼。我已經盡力回答你的問題,特別是關於'mysql_insert_id()' – JNevill
如果您不分享有關您的數據庫結構,示例數據和PHP代碼的任何信息,則無法回答。乍一看,你根本不應該得到任何AUTO_INCREMENT,因爲你沒有留下任何空白欄,但當然這只是一個猜測。 –
mysqli_insert_id()反正只會給你一個id值。無法從多記錄插入中獲取ID。如果你需要這個ID,那麼每一個插入單個/單個插入和last_insert_id()。 –