亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

減少mysql中的庫存項目

減少mysql中的庫存項目

PHP
狐的傳說 2022-10-28 15:40:54
美好的一天,我為 ERP 解決方案創建了一個腳本,該解決方案將項目保存在一個庫存表中,同一個 SKU 以不同的數量和批次多次出現。當我銷售商品時,我希望將庫存數量視為具有相同 SKU 的所有商品的總和,例如:|item_id     |item_sku|   item_quantity|         lot||1           |10101001|   0            |    xyz     ||2           |10101002|   5            |    012     ||3           |10101001|   6            |    123     ||4           |10101001|   7            |    456     ||5           |10101001|   8            |    yf3     |如果我出售 14 件 10101001,我將如何編寫不影響 item_id[1] 的代碼(因為它的 item_quantity 小于 1),從 item_id[3] 和 item_id[4] 中獲取所有數量并減少 item_id [5](14 = 6+7+1)在面向對象的方法中的數量場減 1?我考慮過使用 for each 循環,但我得到的只是減少所有行的數量字段 - 所以也許我沒有以正確的方式編寫它。另外,我考慮將 item_quantity 視為一個總和,因此按 SKU 分組,對 item_quantity 字段求和,然后從該總和中減去 sold_quantity,但是我將如何再次將數量分布在數據庫行中?我真的被困在這里,從周一晚上開始,這個問題就讓我發瘋了。任何幫助將不勝感激。LE:這是我的代碼:$toSell = $value['sales_quantity'];        $sum = StockDetail::where('sku', $product['sku'])->sum('stock_quantity');        $updatedStock = $sum - $toSell;//        StockDetail::where('sku', $product['sku'])->update(['stock_quantity' => $updatedStock]); // doesn't work for lots        foreach($salesProduct as $key => $value) {//// more code here which is irrelevant to the issue I'm facing//            foreach($stockNotNull as $stock => $product) {                if($toSell === 0) {                    return;                }                do {                    $product->stock_quantity->decrement();                    $toSell--;                    if ($product->stock_quantity === 0) {                        continue;                    }                } while($product->stock_quantity > 0 && $toSell > 0);            }        }
查看完整描述

2 回答

?
至尊寶的傳說

TA貢獻1789條經驗 獲得超10個贊

邏輯是:

  1. 開始交易。

  2. 獲取給定的所有行,item_skuitem_quantity > 0升序排列item_quantity。

  3. remaining_to_sell使用要出售的數量進行初始化

  4. 遍歷行,減去min(remaining_to_sell, row.item_quantityitem_quantity保存行。減少該數量remaining_to_sell

  5. 繼續迭代直到remaining_to_sell變為零。

  6. 如果在行尾remaining_to_sell不為零,則您沒有足夠的庫存,因此回滾事務并引發錯誤。否則,提交

我將很快用實際代碼編輯答案。我現在在手機上。


查看完整回答
反對 回復 2022-10-28
?
波斯汪

TA貢獻1811條經驗 獲得超4個贊

foreach ($stockNotNull as $key => $value) {

            if ($toSell < 1) {

                return;

            }

            do {

                --$stockNotNull[$key]->stock_quantity;

                --$toSell;

                StockDetail::where('stock_id', $stockNotNull[$key]->stock_id)

                    ->update(['stock_quantity' => $stockNotNull[$key]->stock_quantity]);

            } while(($toSell != 0) && ($stockNotNull[$key]->stock_quantity != 0));

        }

看來我忘記了基本的算法和循環,因為上次我不得不在大學做這件事......


查看完整回答
反對 回復 2022-10-28
  • 2 回答
  • 0 關注
  • 107 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號