2017-10-05 221 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 3中有20件

什麼時候選擇下一個可用的location_key的最佳方式是第一個用完了?所以在這種情況下,回報將是ID爲6,數量25和id 8,數量15(共計我40)

+0

你能嘗試更好地解釋你的問題? – Tomm

+0

@Tomm基本上,如果我有一個倉庫中的100個產品分成2個地點,50個「a1」和50個「f1」,並且有70個產品的訂單,我想將a1,50和f1,20返回給easilly顯示從倉庫中選擇產品的位置 –

+0

希望這可以在mySQL中完成 –

回答

1

做它在PHP端:

$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

有一個名爲OVER(PARTITION BY概念ID)在SQL服務器,這將導致身份證,數量,我們可以再次查詢以獲得正確的結果。

它很難在MySQL中獲得所需的響應,但在下面的鏈接將有所幫助。

- >https://explainextended.com/2009/03/10/analytic-functions-first_value-last_value-lead-lag/

你應該能夠產生象下面並從你可以sum_all查詢輸出> = 40限制1;

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

我仍然沒有設法排序這 –

+0

哦抱歉不知道你也需要確切的數量,你需要從每個位置拉。讓我重新修復這個功能:) – Solmyr

+0

立即嘗試。不像以前那麼好看,但它的確有用。 – Solmyr