2013-05-13 87 views
1

讓我解釋什麼,我需要和canot得到:( 我有一個DB我的主要另一個是剛剛從冷杉一個獲取數據的一部分PHP插入或更新表

這是我的代碼:

foreach($id_product_array AS $id_product) { 
$resultf = mysql_query("SELECT * FROM db1_available_product WHERE id_product='".$id_product."'"); 
while($rowi = mysql_fetch_array($resultf)) { 
$aa1=$rowi['id_product']; 
$aa2=$rowi['date']; 
$aa3=$rowi['available']; 
$aa4=$rowi['published']; 
mysql_query("INSERT INTO aa_bb.db2_available_product (`id_product`, `date`, `available`, `published`) VALUES ('".$aa1."','".$aa2."', '".$aa3."', '".$aa4."') ON DUPLICATE KEY UPDATE `id_product` = '".$aa1."', `date` = '".$aa2."', `available` = '".$aa3."', `published` = '".$aa4."'"); 
} 

的問題是,這個倍數在DB2中的記錄,所以我現在是在數以百萬計! 其設置爲cron作業1H基礎上。

我需要的是醚它會檢查什麼是現有並且不要碰它或者如果需要更新或插入。

其他的解決辦法是刪除DB2整個表,然後插入來自DB1

+1

[**請不要在新代碼中使用'mysql_ *'函數**](http://bit.ly/phpmsql)。他們不再被維護[並且被正式棄用](http://j.mp/XqV7Lp)。看到[**紅框**](http://j.mp/Te9zIL)?學習[*準備的語句*](http://j.mp/T9hLWi),並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [這篇文章](http://j.mp/QEx8IB)將幫助你決定哪個。 – Kermit 2013-05-13 15:18:41

+0

請您請切換到使用「PDO」或「mysqli_ *」功能的形式 – Ascherer 2013-05-13 15:19:05

回答

2

一個新鮮的,您可以簡化像這樣的查詢:

INSERT INTO tbl2 (column1, column2) 
SELECT column1, column2 FROM tbl1 
ON DUPLICATE ... 

See the documentation

1

你是尋找MySQL的proprietary REPLACE command。它具有相同的語法規則的INSERT,但它插入之前檢查重複的主鍵,一旦發現,將做一個更新替代:

更換作品酷似INSERT,但如果舊的行在 表中與PRIMARY KEY或UNIQUE索引的新行具有相同的值,舊行在插入新行之前被刪除。

當然,你將不得不在桌子上定義一個唯一的PK /索引,允許這個功能起作用。

+0

所以,我只是用上代碼中的REPLACE替換INSERT,對不起,如果這個問題聽起來很愚蠢! – 2013-05-13 15:32:51

+0

我沒有鏈接任何文檔。準確的實施取決於你。 – 2013-05-13 15:35:47

+0

抱歉,我很愚蠢地想通過我自己找出這一個!將托盤一些其他解決方案!但是,謝謝你的回答! – 2013-05-13 15:47:30

0

這裏是更新!

我解決了這個問題:)

由於s到尼爾斯,因爲他讓我重新思考自己的戰略,因此該解決方案很簡單。

在DB1和DB2中有和ID字段 A增加了 $ aa5 = $ rowi ['id']; 以便使DUPLICATE KEY UPDATE正常工作!

foreach($id_product_array AS $id_product) { 
$resultf = mysql_query("SELECT * FROM db1_available_product WHERE id_product='".$id_product."'"); 
while($rowi = mysql_fetch_array($resultf)) { 
$aa5=$rowi['id']; 
$aa1=$rowi['id_product']; 
$aa2=$rowi['date']; 
$aa3=$rowi['available']; 
$aa4=$rowi['published']; 
mysql_query("INSERT INTO aa_bb.db2_available_product (`id`,`id_product`, `date`, `available`, `published`) VALUES ('".$aa5."','".$aa1."','".$aa2."', '".$aa3."', '".$aa4."') ON DUPLICATE KEY UPDATE `id` = '".$aa5."',`id_product` = '".$aa1."', `date` = '".$aa2."', `available` = '".$aa3."', `published` = '".$aa4."'"); 
} 

它接縫,它工作正常! :)