Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 决定重复密钥更新查询?_Php_Mysql_Database - Fatal编程技术网

Php 决定重复密钥更新查询?

Php 决定重复密钥更新查询?,php,mysql,database,Php,Mysql,Database,请参阅下面的代码,它确实有效。 如果记录不存在,则将其插入分支机构表中。 如果它已插入到附属机构表中,则它将在电话表中添加一条新记录。但是,它需要在第三次查询时更新affiliate表(新的最近记录)中的phone\u id字段-是否有办法减少此问题 $SQLInsert = "INSERT INTO affiliate (affiliate_id, affiliate_phone_id, stock) "; $SQLInsert .= "VALUES ('1', '$affiliatePhon

请参阅下面的代码,它确实有效。 如果记录不存在,则将其插入分支机构表中。 如果它已插入到
附属机构
表中,则它将在
电话
表中添加一条新记录。但是,它需要在第三次查询时更新
affiliate
表(新的最近记录)中的
phone\u id
字段-是否有办法减少此问题

$SQLInsert = "INSERT INTO affiliate (affiliate_id, affiliate_phone_id, stock) ";
$SQLInsert .= "VALUES ('1', '$affiliatePhoneID', '$stock') ";
$SQLInsert .= "ON DUPLICATE KEY UPDATE stock = '$stock'";
mysql_query($SQLInsert);
if (mysql_insert_id()) {
    $SQLInsert = "INSERT INTO phone (name) VALUE('$phoneName')";
    $q = mysql_query($SQLInsert);

    // If a record has been inserted into affiliate table and then phone table
    // then it need to update phone_id field in affiliate table. 
    $phone_id = mysql_insert_id();
    $SQLUpdate = "UPDATE affiliate set phone_id = $phone_id WHERE affiliate_id = 1 AND affiliate_phone_id = '$affiliatePhoneID'";
    mysql_query($SQLUpdate) or die(mysql_error());
}

也许你可以改变数据库,让电话表把forainkey保存到affilaite表中。因此,不需要两次更新affilate表

如果这不是您想要的,您可以尝试先更新电话表,
然后是附加表。

您可以使用触发器进行最后一次更新,但它仍将在后台进行数据库调用-您的代码不必担心它。为什么要减少这种情况?我是说它看起来已经很紧凑了。如果你想把它包装成一个自己的函数,可能更确切地说,但你关心的是什么?另外,如果你在第一个查询之前有mysql查询,并且由于重复键更新上的
而按照连接插入东西,那么
mysql\u insert\u id
可能会产生误导。请参阅
mysql\u insert\u id()
函数中的注释。@hakra Yea也许你是对的,也许我太挑剔了,想让自己看起来完美。也许逻辑看起来已经不错了:)@hakra我注意到有个问题
affiliate\u id
affiliate\u phone\u id
是唯一的键。当我更新
股票的新值时
-为什么要插入新记录?我只希望更新。