如何减去几个MySQL字段的某个值

时间:2014-10-20 21:37:51

标签: php mysql function math operations

我正在编写产品库存脚本。我有一个MySQL表“products_stock”:

id   zid   pid  amount
1    123   321   1
2    124   321   5
4    124   566   7
3    125   321   10

因此,库存中产品ID = 321的总量为16.有人使用pid = 321和qty = 7进行订购。 我需要一些php函数,从第一个 zid 开始,将从 amount 列减去7,并更新表 products_stock 中的记录,以便它像这样看:

id   zid   pid  amount
1    123   321   0
2    124   321   0
4    124   566   7
3    125   321   9

我试图做的事情:

function mysql_fields_minus_value ($pid, $amount) {
    $q_select_stock_data = "SELECT * FROM `products_stock` WHERE `pid` = '".$pid."'";
    $r_select_stock_data = mysql_query($q_select_stock_data);
    if (mysql_num_rows($r_select_stock_data)>0) { // First we check if there is such product in stock
        // Then we go through all records which have that pid
                    while ($a_select_stock_data=mysql_fetch_array($r_select_stock_data)) {
              //                            echo "<p>".$a_select_stock_data['stock']."</p>";
                        $product_pid = $a_select_stock_data['sku'];
                        $product_qty_order = 7; // qty of pid in order
                        // than we check if we have enough qtys of product in stock
                        if ($a_select_stock_data['amount'] - $amount)>=0)       { // ok- enough

从这一点开始,我被困住了。

感谢您的回答!

2 个答案:

答案 0 :(得分:0)

没有这样做的功能,你需要迭代所有行,直到你完成。我建议你从数据库获取你希望通过ZID ascendent对它们进行排序的PID。在那之后,尝试做类似的事情:

$i = 0;
while($qty > 0 && $i < count($rows)) {
    if ($row[$i]['amount'] >= $qty) {
        $row[$i]['amount'] -= $qty;
        $qty = 0;
    }
    else {
        $qty -= $row[$i]['amount'];
        $row[$i]['amount'] = 0;
    } 
    ++$i;
}

之后,您可以将值再次存储到数据库中。

编辑:尝试使用PDO或mysqli而不是mysql从数据库中获取行。

答案 1 :(得分:0)

你离实现目标不远了。您需要做的是将MySQL语法从SELECT语句更改为UPDATE语句。

这一行:

$q_select_stock_data = "SELECT * FROM `products_stock` WHERE `pid` = '".$pid."'";

应该是:

$q_select_stock_data = "UPDATE `products_stock` SET `amount` = '".$qty."' 
WHERE `pid` = '".$pid."'";

现在,您需要为要更新的每个pid调用此函数。我建议这样的事情:(请记住,my_sql命令现在已被折旧,我们还需要为函数提供数据库连接对象。

function delete_record($db, $qty, $pid){
mysqli_query($db, "UPDATE `products_stock` SET `amount` = '".$qty."' 
WHERE `pid` = '".$pid."'");
}