我只想在行存在(并已插入)的情况下运行更新查询。我尝试了几种不同的方法,但这可能是我如何循环使用此方法的问题。可以正常工作并创建记录的插入,并且更新应采用现有值并将其每次添加(10存在+ 15添加,25存在+ 15添加,40存在...我在循环中尝试了此操作,但它为列表中的每个项目,每次的数量都是巨大的。此外,每次单击链接时都会运行该页面,以便用户退出并返回
while($store = $SQL->fetch_array($res_sh))
{
$pm_row = $SQL->query("SELECT * FROM `wishlist` WHERE shopping_id='".$store['id']."'");
$myprice = $store['shprice'];
$sql1 = "insert into posted (uid,price) Select '$uid','$myprice'
FROM posted WHERE NOT EXISTS (select * from `posted` WHERE `uid` = '$namearray[id]') LIMIT 1";
$query = mysqli_query($connection,$sql1);
}
$sql2 = "UPDATE posted SET `price` = price + '$myprice', WHERE shopping_id='".$_GET['id']."'";
$query = mysqli_query($connection,$sql2);
答案 0 :(得分:0)
在插入查询中使用template literals,以验证其是否成功插入,您可以为更新查询创建条件。
但是,如果您在插入后立即运行更新,则会导致人们相信可以同时完成更新。在这种情况下,没有上下文,您可以在插入之前将$myprice
乘以2-如果您可以避免这样做,可以考虑一下。
此外,但稍微复杂一点,您可以利用mysqli_affected_rows
来确保您正在引用的行确实要更新。如果插入失败,则不会进行更新。
当然,如果您完全参照插入行进行更新,则更新将不会发生。例如,在这些行上具有主自动递增键,请使用SQL Transactions获取最后插入的ID,然后使用该ID更新该行。但是随后,这种方法可能会破坏大容量系统或只是随机竞争事件,从而使我们直接回到单个查询或事务利用率。