MySQL仅在行之前已插入的情况下更新

时间:2019-08-02 19:05:34

标签: php mysql loops

我只想在行存在(并已插入)的情况下运行更新查询。我尝试了几种不同的方法,但这可能是我如何循环使用此方法的问题。可以正常工作并创建记录的插入,并且更新应采用现有值并将其每次添加(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);

1 个答案:

答案 0 :(得分:0)

在插入查询中使用template literals,以验证其是否成功插入,您可以为更新查询创建条件。

但是,如果您在插入后立即运行更新,则会导致人们相信可以同时完成更新。在这种情况下,没有上下文,您可以在插入之前将$myprice乘以2-如果您可以避免这样做,可以考虑一下。

此外,但稍微复杂一点,您可以利用mysqli_affected_rows来确保您正在引用的行确实要更新。如果插入失败,则不会进行更新。

当然,如果您完全参照插入行进行更新,则更新将不会发生。例如,在这些行上具有主自动递增键,请使用SQL Transactions获取最后插入的ID,然后使用该ID更新该行。但是随后,这种方法可能会破坏大容量系统或只是随机竞争事件,从而使我们直接回到单个查询或事务利用率。