php - php(mysql)中的FIFO计算

标签 php mysql

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

stock_incomes(存储剩余数据)

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

stock_outcomes(这里是重点)

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

当 stock_outcomes.Quantity 小于 100(来自 stock_incomes 的 min(Id),请参阅下面的代码)时,我没有问题,但我不知道要编写什么代码,如果结果 >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...
}
?>

最佳答案

问题已经解决,下面是最终的工作代码,以备不时之需:

<?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 */

?>

关于php - php(mysql)中的FIFO计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34775407/

相关文章:

php - json解码函数后奇怪的sql插入

php - PDO 限制返回的字符数?

java - 如何在 native 查询中使用 sql 函数

打开文档时出现 PHPExcel 警告/错误

php - 如何在没有模块的情况下动态设置错误处理程序的布局

php - 如果mysql中的值为Null,则使用CONCAT时出现问题

php - 从mysql生成多个txt文件

PHP 图像处理 GD JPEG 质量

php在浏览器中打开excel文件

php - 如何根据 php 数据库值动态更改 HTML 中的内容?