PHP如何顺序扣减库存

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-‘$demarndwhere 物品名称='$wupin_name' order by kucun asc limit 1; //order by id asc优先扣减最早入库的库存

思路:

  1. 获取post传入的物品名称和需求量,例如$wupin_name = "QD001", $demand = 8。2. 查询物品名称为$wupin_name的库存记录,按库存量从低到高排序,例如:
    sql
    SELECT * FROM kucun WHERE 物品名称='$wupin_name' ORDER BY 库存 ASC 
    
  2. 遍历查询结果,依次减少每个记录的库存,直到减少的总量达到$demand为止。4. 如果某一记录的库存被减少至0,则继续遍历剩余记录,这一记录的实时库存置为0。5. 当遍历结束或减少的总量达到$demand时,退出遍历。剩余记录的库存量即为实时库存量。实现代码如下:
$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。