我正在尝试更新订单中所有商品的库存剩余数量,当订单在销售点系统中完成时
到目前为止,我的代码是
$order=$_GET["order"];
include('php/config.php');
$invoice=$order;
$voucher=$_GET['voucher'];
$card=$_GET['card'];
$cash=$_GET["cash"];
$date = date('Y-m-d');
$sql="SELECT * FROM `orders` WHERE `invoice` = '".$invoice."'";
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result)) {
$parts[] = array(
"part" => $row['part'],
"qty" => $row['qty'],
);
$sqlstock = "UPDATE `stock` SET available='available - $parts[qty]' WHERE
part = '".$parts['part']."'";
}
答案 0 :(得分:0)
将您的while循环更改为此
while ($row = mysql_fetch_array($result)) {
$parts[] = array(
"part" => $row['part'],
"qty" => $row['qty'],
);
$sqlstock = mysql_query("UPDATE `stock` SET available=available - $parts[qty] WHERE part =
'".$part['part']."'");
}
答案 1 :(得分:0)
可能最好将其作为单个SQL执行: -
UPDATE stock a INNER JOIN order b ON a.part = b.part
SET a.available = a.available - b.qty
WHERE b.invoice` = '$order'
请注意,您不要多次重新运行此操作,而无需检查订单是否尚未用于更新库存
这样做,如果订单上有1000个商品,那么它就是一个查询。执行选择然后循环结果将需要10001个查询。
答案 2 :(得分:0)
您的主要问题是available='available - $parts[qty]'
和.$parts.
available='available - $parts[qty]'
将被解释为字符串,因此将其更改为
available=available - {$parts['qty']}
并将.$parts.
更改为.$parts['part']
此外,如果您正在编写此新代码,请考虑将mysql_
函数转换为mysqli_
或使用PDO,因为mysl现已弃用且不再受PHP支持。