2014-10-17 79 views
0

你好我有一个表A,我希望当一个新的值(不是更新)插入到表中插入表B中的INSERT,我试图与响应在$查询INSERT INTO ..对重复密钥更新,但没有运气的,它总是返回1.Mysql INSERT ...在重复密钥更新响应

$query = "INSERT INTO table ".$fields." VALUES ".$values." ON DUPLICATE KEY UPDATE updated=1" 
$response = $dbc->query($query); 
if($response == 1) 

我也尝试了“黑客”让说,把UPDATE插入件之上,所以如果进入犯规存在失败,但每次都返回1。

$query = "UPDATE table SET updated=1 ..; 
$response = $dbc->query($query); 
if($response == 1) 

回答

0

感谢@boomoto帮我找出了答案:

$query = "UPDATE tableA .. 
$response = $dbc->query($query); 
if(mysqli_affected_rows($dbc)==0){ 
     $query2 = "INSERT INTO tableB .. 
     $response2 = $dbc->query($query2); 

     $query = "INSERT INTO tableA .. 
     $response = $dbc->query($query); 
    } 
} 
0

这应该工作:

<?php 
$link = mysqli_connect("localhost", "my_user", "my_password", "world"); 
mysqli_query($link, "INSERT INTO tableA ".$fields." VALUES ".$values." ON DUPLICATE KEY UPDATE updated=1"); 

if(mysqli_affected_rows($link)==1) 
{ 
    mysqli_query($link, "INSERT INTO tableB ".$fields." VALUES ".$values."); 
} 
?> 
+0

我试图做到这一点不存在性能问题的附加查询,表A将变得非常大,并且会有很多INSERTS调用这个查询。所以如果一个SELECT需要5秒钟,而且我每天有2000个INSERTS使用这个解决方案,那么需要20000s – 2014-10-17 12:14:09

+0

更新答案。 – boomoto 2014-10-17 12:21:43