可用性计算php中的逻辑

时间:2016-07-25 02:38:46

标签: php mysql

enter image description here

这是一个mysql查询结果。现在我必须根据每个challan Id计算php中的可用数量。预期结果将是:

ChallanId |  Avaiable Qty  |  unitCostPrice  | totalPrice     
  11      |    7           |     2           |   14         
  12      |    10          |     1           |   10

如何在PHP中完成?使用foreach或任何其他技巧。

3 个答案:

答案 0 :(得分:3)

虽然您希望为PHP解决方案实现此目的,但在这里我认为SQL查询也可以这样做:

select
    ChallanId,
    sum(case when Narration = 'in' then ItemIn when Narration = 'out' then  0 - ItemOut end) as Avaiable_Qty,
    unitCostPrice,
    sum(case when Narration = 'in' then ItemIn when Narration = 'out' then  0 - ItemOut end) * unitCostPrice as totalPrice
from (your query here...)
having Avaiable_Qty > 0
group by ChallanId

答案 1 :(得分:2)

我会通过更聪明的查询在SQL中进行计算。

select 
    ChallanId,
    UnitCostPrice,
    sum(`ItemIn`)-sum(`ItemOut`) as AvailableQty,
    (sum(`ItemIn`)-sum(`ItemOut`))*UnitCostPrice as totalPrice
from tbl
group by ChallanId

Live demo

答案 2 :(得分:0)

这是伪代码类型,因为你没有与PHP共享你的实现。

首先,你可以假设ItemIn或ItemOut不是零的叙述,事实上它可能更好,因为你可以用同一行引入项目以及项目。但那不是问题。

$output = array();
foreach ($dbResults as $row) {
    // Create an output entry
    if (!array_key_exists($row['ChallanID'], $output)) {
        $output[$row['ChallanID']] = array('Qty' => 0, 'CostPrice' => 0, 'Total' => 0);
    }

    // Add to totals
    $output[$row['ChallanID']]['Qty'] += ($row['ItemIn'] - $row['ItemOut']);
    $output[$row['ChallanID']]['CostPrice'] = $row['UnitCostPrice']; // you may want to average this instead?
    $output[$row['ChallanID']]['Total'] += $output[$row['ChallanID']]['Qty'] * $output[$row['ChallanID']]['CostPrice'];
}

$output现在应该包含您想要的输出。未经测试。