PHP插入或更新表

时间:2013-05-13 15:17:20

标签: php mysql insert mysqli sql-update

让我解释一下我的需要和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中插入一个新表

3 个答案:

答案 0 :(得分:2)

您可以像这样简化查询:

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

See the documentation

答案 1 :(得分:1)

您正在寻找MySQL的proprietary REPLACE command。它具有与常规INSERT相同的语法,但它在插入之前检查重复的主键,如果找到它则会执行UPDATE:

  

REPLACE的工作原理与INSERT完全相同,只是如果在一个旧行中   table与PRIMARY KEY或UNIQUE的新行具有相同的值   index,在插入新行之前删除旧行。

当然,您必须在表上定义一个允许此功能起作用的唯一PK /索引。

答案 2 :(得分:0)

这是更新!

我解决了问题:)

感谢Niels,因为他让我重新考虑我的策略,所以解决方案很简单。

在DB1和DB2中有提交和ID 一个补充 $ AA5 = $行1 [ '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."'");
}

它接缝正常工作! :)