PHP扣减库存时如何实现顺序扣减。
目前当post传过来的需求是1的时候,可以一个一个扣减,但是当传过来的需求数是5的时候该怎么实现先扣除库存最低的?
例如post传送的物品名称QD001需求量为8时,如何做到先减id为1的1个库存(先清零),再顺序扣减id为2的5个库存(清零),最后扣减id为3的2个库存(实时库存变为8)?
数据库结构
id 上货日期 物品名称 物品ID 库存
1 2023-4-12 QD001 FF202101 1
2 2023-5-1 QD001 FF202305 5
3 2023-5-20 QD001 FF202302 10
当前仅能实现需求是1的扣减,优先扣减库存最低的。
```php
$demand = $_POST['demand ']
$wupin_name= $_POST['wupin_name']
update kucun set kucun=kucun-‘$demarnd’ where 物品名称='$wupin_name' order by kucun asc limit 1; //order by id asc优先扣减最早入库的库存
思路:
sql
SELECT * FROM kucun WHERE 物品名称='$wupin_name' ORDER BY 库存 ASC
$demand = $_POST['demand'];
$wupin_name = $_POST['wupin_name'];
$result = mysqli_query($conn, "SELECT * FROM kucun WHERE 物品名称='$wupin_name' ORDER BY 库存 ASC");
$reduced = 0; //已减少的总量
while($row = mysqli_fetch_assoc($result)) {
if($reduced < $demand) {
if($row['库存'] <= $demand - $reduced) {
$reduced += $row['库存'];
$sql = "UPDATE kucun SET 库存=0 WHERE id={$row['id']}";
mysqli_query($conn, $sql);
} else {
$sql = "UPDATE kucun SET 库存={$row['库存']-($demand-$reduced)} WHERE id={$row['id']}";
mysqli_query($conn, $sql);
$reduced = $demand;
break;
}
}
}
这个思路是按库存量从低到高顺序扣减各记录的库存,直到达到需求量为止。如果某记录的库存扣减至0,则继续扣减下一记录,这一记录的实时库存置0。