【问题标题】:Update Query Using For and While Loop使用 For 和 While 循环更新查询
【发布时间】:2021-05-06 06:24:59
【问题描述】:

我想使用 for 循环和 while 循环运行更新查询。因为我想更新产品数量 总数量减去订单数量后,根据产品id和总数量下单成功后的产品表中。但是查询没有运行成功。

我的代码:

           // Update Query 
            $update_quantity = "";
            for ($i = 0; $i < (count($_SESSION['shopping_cart'])); $i++) {

                $select_quan = "SELECT * FROM product WHERE pid = {$pid[$i]}";
                $result_quan = mysqli_query($con, $select_quan);

                // $update_quantity .= " UPDATE product SET ";

                while ($row_quan = mysqli_fetch_assoc($result_quan)) {

                    $quantity_after_order[$i] =   $row_quan['pquantity'] - ($pquantity[$i]);

                    $update_quantity .= "UPDATE product SET pquantity = '$quantity_after_order[$i]' WHERE pid=$pid[$i]; ";
                }
            }

当我运行查询时:

            // echo $update_quantity;
            if ($con->query($update_quantity) == TRUE) {
                 echo "Data Successfully Updated";
             }
             else{
                  echo "Error: $update_quantity <br> $con->error";
             }

它给出的输出:

Error: UPDATE product SET pquantity = '246' WHERE pid=7; UPDATE product SET pquantity = '11' WHERE pid=32;

您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 1 行的“UPDATE product SET pquantity = '11' WHERE pid=32' 附近使用正确的语法

如果运行此查询的另一种方式在订单成功后根据 product_id 更新数据库中的数量,请告诉我。

【问题讨论】:

标签: php mysql mysqli sql-update product-quantity


【解决方案1】:

在一个语句中你可以这样做:

UPDATE product SET pquantity =
    CASE pid
        WHEN 7 THEN '246'
        WHEN 32 THEN '11'
    END
WHERE pid in (7,32);

有时在行数确实很大的情况下,您会使用临时表:

CREATE TEMPORARY TABLE product_update (pid int, pquantity varchar(10));
INSERT INTO product_update VALUES (7,'246'),(32,'11'),....;
UPDATE product_update JOIN product USING (pid) SET product.pquantity=product_update.pquantity;
DROP TEMPORARY TABLE product_update;

【讨论】:

  • 感谢朋友,但我的代码运行没有错误,我在另一台机器上运行相同的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-15
  • 1970-01-01
  • 1970-01-01
  • 2017-09-12
  • 2014-02-01
  • 1970-01-01
  • 2014-06-18
相关资源
最近更新 更多