如果多个键是相同的MySql,PHP Sum列值

时间:2015-11-10 12:01:50

标签: php mysql

我有以下表,其结果是从mysql查询中获取的。这些值仅供参考。

Item | Location |  CheckIn   |  Checkout  | Quantity

  A  |   abc    | 10/10/2015 |            |    20
  A  |   abc    |            | 11/10/2015 |    10
  B  |   def    | 11/10/2015 |            |    25
  A  |   abc    | 12/10/2015 |            |    5
  B  |   def    |            | 13/10/2015 |    10
  B  |   def    | 14/10/2015 |            |    3
  A  |   ghi    | 14/10/2015 |            |    30

我想根据相同的项目和位置以及条件总计数量。例如,如果项目签入,则项目的数量将添加到该位置。如果项目结账,则从特定位置的项目的当前总数量中减去项目的数量。

我有第二张桌子,它会在特定位置显示每个项目,并显示该位置的项目总数。到目前为止我所拥有的是这样的:

Item | Location | Total Quantity

  A  |   abc    |  20
  A  |   abc    |  10
  B  |   def    |  35
  A  |   abc    |  40
  B  |   def    |  30
  B  |   def    |  33
  A  |   ghi    |  63

预期结果应如下:

Item | Location | Total Quantity

  A  |   abc    |  15
  B  |   def    |  18
  A  |   ghi    |  30

到目前为止我为第二张表做的代码:

<?php
$result = mysql_query("SELECT * FROM itemloc INNER JOIN tblitem ON itemloc.itemId=tblitem.itemId INNER JOIN tblloc ON itemloc.locId=tblloc.locId");
$loc = array();
$total = 0;

while($row = mysql_fetch_array($result))
{
$checkout = $row['itemLocCheckOut'];
if($loc[$row['locId']] = $row['itemId']){
    if(is_null($checkout)){
        $qty = +$row['itemLocQty'];
        }
    else{
        $qty = -$row['itemLocQty'];
        }
$total+=$qty;
$name = $row['itemNm'];
$locnm = $row['locNm'];
}
?>
<tr>
    <td><?php echo $name;?></td>
    <td><?php echo $locnm;?></td>
    <td><?php echo $total;?></td>
</tr>

<?php
}
?>

非常感谢任何帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

我会创建一个带有第一个索引项字符串的数组,第二个是位置 对于读取的每一行,我会这样做:

while($row = mysql_fetch_array($result))
{
    $item = $row['item'];
    $location = $row['location'];
    if(!isset($result[$item][$location]))
        $result[$item][$location] = 0;
    if(is_null($row['itemLocCheckOut']))
        $result[$item][$location] += $row['quantity'];
    else
        $result[$item][$location] -= $row['quantity'];
}

最后,在桌子上传递2个foreach:

foreach($result as $k1 => $v1)
    foreach($v1 as $k2 => $v2)
         echo "Item $k1 location $k2 has $v2 quantity"