2017-09-21 140 views
1

我正在嘗試根據數據庫中的信息創建數據包。根據維數創建數據包

數據庫的組織是這樣的:

ID ORDERID DIMENSION QUANTITY 
1 21 8400  25 
2 21 7200  8 
3 21 4300  5 
4 21 3800  7 

第一件事,從數據庫

$sql = "SELECT ID, ORDERID, DIMENSION, QUANTITY FROM dimension WHERE ORDERID = 21 ORDER BY DIMENSION DESC"; 

$q = $conn => query($sql); 

while($r = $q->tech()){ 
    $dim =$r['DIMENSION ']; 
    $quant =$r['QUANTITY ']; 
} 

然後,我從另一個表中檢索數據,爲前獲取信息。我得到10號

$query = "SELECT QUANTITY FROM panel WHERE ID = 21; 

$q = $conn->query($query); 

while ($r=$q->fetch()){ 
    $number = 10; 
} 

使從最長尺寸包裝是非常重要的。

例如,我有尺寸8400的數量25.面板的最大數量是10,這意味着我將有兩個數據包,每10個面板將保留5個。 5進入下一個維度,我們將該面板的最大數量達到$數量。剩餘的維度進入下一個維度,並保持這種狀態。

一旦我得到的所有信息,我需要做包裝,最後包裝解決方案應該是

------------------- 
8400 x 10 - Packet1 
------------------- 
8400 x 10 - Packet2 
------------------- 
8400 x 5 
7200 x 5 - Packet3 
------------------- 
7200 x 3 
4300 x 5 
3800 x 2 - Packet4 
------------------- 
3800 x 5 - Packet 5 
------------------- 

一旦我得到這個數據,我應該將其插入到數據庫 其中8400是尺寸,10,面板,「Packet1」 - 名稱

我被卡住了,不知道如何執行此操作。我不知道算法是否存在。

回答

0

你可以這樣來做:

// assuming you have collected the results from your sql query like this: 
while($r = $q->tech()) $dat[]=array($r['DIMENSION'],$r['QUANTITY']); 

// you will end up with an array $dat: (dimension, quantity) like this: 
// $dat=array(array(8400,25),array(7200,8),array(4300,5),array(3800,7)); 
// package size: 
$n=10; 

$cnt=0;      // initialize package counter 
$pack=array();     // set up first package 
$d=array_shift($dat);   // get first lot $d from $dat 

do {  
    if ($d[1]>0){  
    $take=min($d[1],$n-$cnt); // decide how much to take out ... 
    $cnt+=$take;    // increase package counter 
    $d[1]-=$take;$pack[]=array($d[0],$take); // tranfer the goods ... 
           // if package is full, start next one 
    if ($cnt==$n) {$packs[]=$pack; $pack=array(); $cnt=0;} 
    } else if(count($dat)>0){ // still elements in $dat left? 
    $d=array_shift($dat);  // get the next lot $d from $dat 
    } else break;  
} while(true); 
if ($cnt>0) $packs[]=$pack; // collect the last "stranded" package ... 

echo str_replace("]],","]],\n ",json_encode($packs)); // as JSON string 
// print_r($packs);   // conventional (bulky) PHP object notation 

這導致以下結果(JSON對象):

[[[8400,10]], 
[[8400,10]], 
[[8400,5],[7200,5]], 
[[7200,3],[4300,5],[3800,2]], 
[[3800,5]]] 
+0

這正是我一直在尋找。一旦我得到這些信息,我需要將它存儲在數據庫中。我的表是有組織的ID | ORDERID | DIMENSION | QUANTITY |名稱。我有訂單ID,角錢(8400)和數量10.訂單名稱可以是第一組Packet1,第二組Packet2,對於第三種情況,Packet3對於這兩個組將是相同的名稱8400和7200.它增加1。是可能的。謝謝 –