更新数据库中的产品库存

时间:2019-08-02 18:13:37

标签: php mysql sql

我想在购买后更新数据库中我产品的库存数量。

我的代码已经可以正常工作,但是我想知道是否只有一个SQL语句才是最好的方法?

// All the product in the member's cart
if ($stmt = $conn->prepare("SELECT product_id, quantity FROM tbl_cart WHERE member_id = ?")) {
  $stmt->bind_param("i", $memberId);
  $stmt->execute();
  $result = $stmt->get_result();
  $stmt->close();
  $cartItem = $result->fetch_all(MYSQLI_ASSOC);

// Set the quantity after purchase
  foreach ($cartItem as $key => $item) {
    $stmt = $conn->prepare("UPDATE tbl_product SET stock = stock-? WHERE id = ?");
    $stmt->bind_param("ii", $item['quantity'], $item['product_id']);
    $stmt->execute();
    $stmt->close();
  }
}

3 个答案:

答案 0 :(得分:0)

我不知道这是否是更好的方法,但是您可以尝试使用此Sql语句。

UPDATE tbl_product 
SET stock = stock - ( SELECT quantity FROM tbl_cart 
WHERE product_id = tbl_product.id AND member_id = ? ) 
WHERE id IN ( SELECT product_id FROM tbl_cart WHERE member_id = ? )

答案 1 :(得分:0)

您可以尝试使用触发功能。看这里:mysql after insert trigger which updates another table's column

您可以在下订单时更新其他列。

我认为,触发器功能不是最佳选择,因为它将逻辑转移到其他地方。

但这是您要求的替代方法之一。

答案 2 :(得分:0)

这就是我找到的解决方案。我认为这更干净。

$stmt = $conn->prepare("UPDATE tbl_product AS p 
                        JOIN tbl_cart AS c
                        ON p.id = c.product_id 
                        SET p.stock = p.stock-c.quantity
                        WHERE c.member_id = ?");
  $stmt->bind_param("i", $memberId);
  $stmt->execute();
  $stmt->close();

谢谢您的帮助。