繁体   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