2012-07-18 68 views
4

我在PHP 5.4中使用MySQL 5.5。我正在執行批量插入操作,需要捕獲所有新插入的ID。這是我的代碼:批量插入後檢索ID's

$db->query("INSERT INTO commodity (analysis_id, commodity_description, a_units, 
a_average_yield, a_average_price) SELECT $analysis_id, commodity_description, 
a_units, a_average_yield, a_average_price FROM commodity WHERE analysis_id = 
$import_analysis_id"); 

有沒有辦法檢索插入的行的所有新ID?使用$db->insert_id只會返回一個ID。我討厭必須使用PHP循環並執行幾個查詢,但如果必須的話,我會這樣做。謝謝!

+0

不可能(我知道沒有已知的解決方案)。您能否請您舉個例子來說明您需要的ID?可能是我們可以找到另一種方法來存檔您的目標... – Ron 2012-07-18 13:22:28

+0

你有什麼日期時間提交到你的表嗎?如果是,那麼你可以編寫簡單的查詢來獲得特定時間戳後的所有插入的ID .. – 2012-07-18 13:29:22

+0

什麼是你想要的「ID」的字段名稱?我猜測它不是analysis_id。它可能是商品ID或也許只是ID? – ghbarratt 2012-07-18 13:36:06

回答

0

我想我是在想這個。由於我插入了analysis_id(例如,案例編號,客戶編號等),因此我決定在該函數之後運行一個查詢,以便爲插入的analysis_id提取所有ID。這解決了我的問題。

+0

很酷。然後是analysis_id索引? – 2012-07-18 13:40:49

+0

是的,analysis_id被編入索引。 – Jeff 2012-07-18 13:54:12

4

您可以先找到自動遞增的id s,方法是首先在表格中選擇最高的ID。插入之後,新的插件更新爲id

select max(id) from commodity 
+2

這不是併發安全的... – Ron 2012-07-18 13:24:01

+6

使用此解決方案時,請考慮使用LOCK TABLES來防止其他會話插入到同一個表中,從而導致數據偏差。 – 2012-07-18 13:24:08

+1

它應該通過周圍的事務來工作。 – 2012-07-18 13:26:26