簡體   English   中英

PHP插入或更新表

[英]PHP Insert or update table

讓我解釋一下我需要和canot得到:(我必須DB一個我主要另一個是從第一個獲取數據的一部分。

這是我的代碼:

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中的記錄倍增,所以現在我已經達到了數百萬! 它在1小時的基礎上設置為cron作業。

我需要的是以太網它檢查現有的東西,不要觸摸它,或者需要更新或插入。

另一個解決方案是刪除DB2中的整個表,然后從DB1插入一個新表

您可以像這樣簡化查詢:

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

請參閱文檔

您正在尋找MySQL 專有的REPLACE命令 它具有與常規INSERT相同的語法,但它在插入之前檢查重復的主鍵,如果找到它,它將執行UPDATE:

REPLACE與INSERT的工作方式完全相同,只是如果表中的舊行與PRIMARY KEY或UNIQUE索引的新行具有相同的值,則在插入新行之前刪除舊行。

當然,您必須在表上定義一個允許此功能起作用的唯一PK /索引。

這是更新!

我解決了問題:)

感謝Niels,因為他讓我重新思考我的策略,所以解決方案很簡單。

在DB1和DB2中有和ID提交的A添加$ aa5 = $ rowi ['id']; 使ON 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."'");
}

並且接縫它工作正常! :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM