Php 如何从几个MySQL字段中减去某个值

Php 如何从几个MySQL字段中减去某个值,php,mysql,function,math,operations,Php,Mysql,Function,Math,Operations,我正在写产品库存脚本。我有一个MySQL表产品库存: 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,数量=7。 我需要一些php函数,它将从第一个zid开始的列amount减去7,并更新表products_stock中的记录,以便如下所示: id zid pid am

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

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,数量=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
从这一点上说,我被绊倒了


谢谢你的回答

没有函数可以这样做,您需要迭代所有行,直到完成。我建议您使用PID从DB中获取行,您希望通过ZIDAscendent对它们进行排序。之后,尝试做类似的事情:

$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从数据库获取行。

您离实现目标不远了。您需要做的是将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中调用此函数。我建议这样做:请记住,我的_sql命令现在已经贬值,我们还需要为函数提供一个数据库连接对象

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

你能分享你尝试过的吗?或者你想让我们帮你写出来吗?如果你在某一点上遇到困难,请尝试写你的函数并在这里发布代码。你的问题对于stackoverflow来说太宽泛了。我必须同意每个人的意见。这是一个糟糕的问题,你应该给社区更多的东西来帮助你解决这个糟糕的问题。我已经补充了我试图解决的问题,它们不再被维护,而且已经被使用。而是学习,并使用或。我不能删除记录,我在这里写了一个简单的例子。在现实生活中,表中有更多的字段用于统计库存产品的移动。好的,我已经调整了查询以更新记录!