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
是唯一的键。当我更新股票的新值时
-为什么要插入新记录?我只希望更新。