【问题标题】:Mysql only update if row has been inserted beforeMysql 仅在之前插入行时更新
【发布时间】:2019-08-02 19:05:34
【问题描述】:

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

【问题讨论】:

标签: php mysql loops


【解决方案1】:

在插入查询上使用mysqli_affected_rows,验证它是否成功插入,您可以为更新查询创建条件。

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

此外,但稍微复杂一些,您可以为此使用SQL Transactions,并确保您准确引用了您想要更新的行。如果插入失败,您的更新将不会发生。

当然,如果您为更新完美地引用了插入的行,那么无论如何更新都不会发生。例如,在这些行上有一个主自增键,使用mysqli_insert_id 获取最后插入的 ID,并使用该 ID 更新行。但是这种方法可能会在大容量系统或随机竞赛事件中出现问题,这会导致我们直接回到单个查询或事务利用率。

【讨论】:

    猜你喜欢
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多