2014-10-20 231 views
-6

我正在写产品库存脚本。我有一个MySQL表“products_stock”:如何从几个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开始7,并在表中更新记录 products_stock,使其lookes后是这样的:

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 

从这一点我被困住了。

谢谢你的回答!

+0

你能分享你已经尝试过什么,或者你想要的。我们只是为你写出来的吗? – 2014-10-20 21:44:27

+0

请尝试编写你的函数,并在这里发布代码,如果你在某个时刻被卡住了,你的问题对于计算器来说太宽了。 – Ejaz 2014-10-20 21:44:35

+0

我必须同意每一个人这是一个穷人问题,你应该给社会更多的帮助你 – MZaragoza 2014-10-20 21:50:25

回答

0

没有这样做的功能,你需要迭代所有的行直到你完成。我建议您从数据库中获取您想要通过ZID订购的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从数据库中获取行。

+0

很酷,我会试试看! :) Thanx! – Kamnibula 2014-10-20 22:06:20

+0

这是很好的答案!这真的很有用! – Kamnibula 2014-10-21 05:12:57

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."'"); 
} 
+0

我无法删除记录,我在这里写下了一个简单的例子。在现实生活中,有更多的领域是库存产品运动统计所需要的。 – Kamnibula 2014-10-20 22:17:05

+0

好吧,我已将查询调整为“更新”记录! – 2014-10-20 22:31:32