mysql在完整的订单数组上更新数量

时间:2013-05-08 15:22:27

标签: php mysql

我正在尝试更新订单中所有商品的库存剩余数量,当订单在销售点系统中完成时

到目前为止,我的代码是

$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']."'";
}

3 个答案:

答案 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支持。

http://www.php.net/manual/en/mysqli.construct.php

http://uk1.php.net/manual/en/pdo.construct.php