2013-05-13 138 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."'"); 
} 

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