[英]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.