我正在编写产品库存脚本。我有一个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,数量=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中获取行,并按ZID升序排序。在那之后,试着做一些类似的事情:
$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;
}
之后,您可以再次将值存储到DB中。
EDIT:尝试使用PDO或mysqli而不是mysql从DB中获取行。
您离实现目标不远了。您需要做的是将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."'");
}