2017-10-05 16 views
1

私は自分のシステムの在庫管理に取り掛かりました。私は倉庫内の在庫の「場所」のテーブルを持っています。これはロケーションテーブルです。MySQLは値に応じて複数のidを選択します

id location_description_id location_key product_id qty 
6 1      1    3   25 
7 1      2    4   25 
8 1      3    3   20 

私は場所の値を取得するのに苦労しています。たとえば、商品ID「3」の商品が40個注文されている場合、location_key 1に25個、location_keyに20個が表示されます3

次の使用可能なlocation_keyを選択するには、最初のものは使い果たされますか?したがって、この場合にはリターンがID 6、数量25とid 8、数量15

+0

は、あなたがより良いあなたの疑問を説明しようとしてもらえますか? – Tomm

+0

@Tomm基本的には、倉庫内の100の製品が2つの場所に分かれていて、「a1」は50、「f1」は50で、70の製品があります.150とf1,20を簡単に返すことになります。倉庫内の製品をどこから選ぶか表示する –

+0

これは、MySQLで行うことができます。 –

答えて

1

PHP側でそれを行う(私の40の合計)のようになります。

$dbLocations = $db->prepare("SELECT * FROM location WHERE product_id = 3")->queryAll(); 

$totalOrder = 50; 
$leftOrder = $totalOrder; 
$locations = []; 

while ($leftOrder >= 0) { 
    $location = array_shift($dbLocations); 

    if (!empty($location)) { 
     $leftOrder -= $location['qty']; 
     $locations[] = $location; 
    } else { 
     throw new Exception('Quantity is too big for locations'); 
    } 
} 
0

(PARTITION BY OVERと呼ばれる概念がありますid)を返すと、id、qtyという結果になり、適切な結果を得るために再度問い合わせることができます。

MySQLでは必要な応答を得るのは難しいが、それ以下のリンクは役に立ちます。

- あなたは、以下のような出力を生成し、それから、あなたがsum_all> = 40リミット1を照会することができることができるはずです>https://explainextended.com/2009/03/10/analytic-functions-first_value-last_value-lead-lag/

id location_key product_key qty sum_all 
6 1   3   25 25 
8 3   3   20 45 
+0

あなたのリンクは将来無効かもしれません、リンクの代わりに適切な説明を入れてください。 – Justinas

1

注文した製品が保管されているすべての場所を選択すると、結果が得られたとします。あなたはこれをPHPで行うことができます。

編集:すべての場所から選択する数量も返すように編集しました。

function findLocations($locations, $orderQty) 
{ 
$resultLocs = array(); 
$i = 0; 
$orderRemainQty = $orderQty; 

while ($orderRemainQty != 0) { 
    $locQty = $locations[$i]['qty']; 
    If ($orderRemainQty > $locQty){ 
     $locations[$i]['pickUpQty'] = $locQty; 
     $orderRemainQty -= $locQty; 
    } else { 
     $locations[$i]['pickUpQty'] = $orderRemainQty; 
     $orderRemainQty = 0; 
    } 
    $resultLocs[] = $locations[$i]; 
    $i++; 
} 
return $resultLocs; 

}

+0

まだIveはこれを分類することができません –

+0

ああ、申し訳ありませんが、あなたはまた、あらゆる場所から引き出す必要がある正確な量が必要であることを理解しています。 Lemme関数を再修正:) – Solmyr

+0

今すぐお試しください。以前と同じように見栄えが悪いですが、それはトリックです。 – Solmyr

関連する問題