2016-01-13 251 views
0

我有两个数据表stock_incomes,stock_outcomes和stock_outcomes_fifo(一个我插入预先计算的数据):FIFO计算

stock_incomes(存储剩菜数据)

id| Levtv 
----------- 
7 | 100 
8 | 250 
9 | 350 

stock_outcomes(这里是从stock_incomes点)

id| Quantity 
-------------- 
1 | 150* 

我没有问题,当stock_outcomes.Quantity小于100(分钟(同上),请参阅下面我的代码),但我不知道世界卫生大会t代码写我可以得到计算,如果结果是> 100。在我的例子中,我用150,我想在接下来的表来获取数据:

stock_outcomes_fifo(一个我想从以前的两个表插入预先计算的数据)

id| IncomeId| OutcomeId| OutcomePart| Leftv 
--------------------------------------------- 
1 | 7 |  1 |  100 | 0 
2 | 8 |  1 |  50 | 200 

这里是我的里面的问题代码(见代码的最后一部分):

<?php 
include_once("config.inc.php"); 
include_once("db.class.php"); 

// stock_outcomes 
$db = new db($host, $database, $user, $passwd); 
$sql = "SELECT * FROM stock_outcomes WHERE Id = '1'"; 
$mas = $db->get_array($sql); 

if($mas) { 
    foreach ($mas as $k => $v) { 
      $OutcomeId = $mas[$k]['Id']; 
      $OutcomeQuantity = $mas[$k]['Quantity']; 
    } 
} 

// stock_incomes 
$sql = "select * from stock_incomes where Id = (select min(Id) from stock_incomes where Leftv > 0)"; 
$mas = $db->get_array($sql); 

if($mas) { 
    foreach ($mas as $k => $v) { 
     $IncomeId = $mas[$k]['Id']; 
     $IncomeLeftv = $mas[$k]['Leftv']; 
    } 
} 

// insert into stock_outcomes_fifo 

if ($OutcomeQuantity <= $IncomeLeftv) { 
    $OutcomePart = $OutcomeQuantity; 
    $FifoLeftv = $IncomeLeftv - $OutcomeQuantity; 

    mysql_query("INSERT INTO `stock_outcomes_fifo` (IncomeId,OutcomeId,OutcomePart,Leftv) VALUES ($IncomeId, $OutcomeId, $OutcomePart, $FifoLeftv)"); 
} 

if ($OutcomeQuantity > $IncomeLeftv) { 
    // I have no idea what php function to use in this case... please give me direction, thank you... 
} 
?> 
+0

我编辑了你的文章,使代码更具可读性,但你的问题仍然有点不清楚。你能再看看你的问题,看看你是否可以改写它来使它更容易理解? – jbafford

回答

0

的问题已经解决了,这里是最后的工作代码的情况下,有人可能会需要它:

<?php 
include_once("config.inc.php"); 
include_once("db.class.php"); 

// stock_outcomes 
$db = new db($host, $database, $user, $passwd); 
$sql = "SELECT * FROM stock_outcomes WHERE Id = '1'"; 
$mas = $db->get_array($sql); 

if($mas){ 
    foreach ($mas as $k=>$v) { 
      $OutcomeId=$mas[$k]['Id']; 
      $OutcomeBarCode=$mas[$k]['BarCode']; 
      $OutcomeQuantity=$mas[$k]['Quantity']; 
    } 
} 

/* - Start code */ 
if ($OutcomeQuantity > 0) { 
$sql = "select * from stock_incomes where Leftv > 0 order by id asc"; 
$mas = $db->get_array($sql); 

if ($mas) { 
    //filing stock_outcomes_fifo 
     foreach ($mas as $k=>$v) { 
     $IncomeId = $mas[$k]['Id']; 
     $IncomeQuantity = $mas[$k]['Quantity']; 
     $IncomeUnitPrice = $mas[$k]['UnitPrice']; 
     $IncomeLeftv = $mas[$k]['Leftv']; 

     $OutcomePart = min($OutcomeQuantity, $IncomeLeftv); 
     $FifoLeftv = $IncomeLeftv - $OutcomePart; 
     $FifoCost = $IncomeUnitPrice * $OutcomePart; 

     mysql_query("INSERT INTO `stock_outcomes_fifo` (BarCode,IncomeId,OutcomeId,OutcomePart,UnitPrice,Leftv,Cost) VALUES ($OutcomeBarCode, $IncomeId, $OutcomeId, $OutcomePart, $IncomeUnitPrice, $FifoLeftv, $FifoCost)");   
     mysql_query("UPDATE `stock_incomes` SET Leftv = ".$FifoLeftv." WHERE Id = ".$IncomeId); 

     $OutcomeQuantity -= $OutcomePart; 
     if ($OutcomeQuantity <= 0) break; 
    } 

    $OutcomeCostQuery = "select sum(Cost) as summ from stock_outcomes_fifo where OutcomeId = ".$OutcomeId.""; 
    $OutcomeCost = mysql_query($OutcomeCostQuery); 
    $OutcomeCostResult = mysql_fetch_array($OutcomeCost);   
    mysql_query("UPDATE `stock_outcomes` SET Cost = ".$OutcomeCostResult["summ"]." WHERE Id = ".$OutcomeId.""); 
} 
} /* - Finish code */ 

?>