PHP表。在新组之前显示总数

问题描述 投票:0回答:2

我在组中显示总数时遇到问题。

这是我的方案,我有一个按地区和产品分组的报告。

我已经拥有的是区域组的行。

我想要做的是在下一组的行之前显示每个区域的产品总数。目前,它显示每行后的总数。

这是我的代码。

<?php if (isset($summaryPerArea)): ?>
  <div class="col-lg-12">
    <table id="" class="table table-bordered table-condensed table-striped">
      <thead>
        <tr>
          <th>Area</th>
          <th>Material</th>
          <th>Quantity</th>
        </tr>
      </thead>
      <tbody>
      <?php 
        $prevArea = '';
        $total = 0;
        $currentQty = 0;
      ?>
      <?php foreach ($summaryPerArea as $key => $value): ?>
        <?php $currentQty = $value['totalQty']; ?>
        <?php $total += $value['totalQty']; ?>
        <?php if ($value['area'] != $prevArea): ?>
          <tr class="bg-info">
            <?php if ($key != 0) {$total = $currentQty;} ?>
            <td colspan="3"><?php echo $value['area']; ?></td>
            <?php $prevArea = $value['area']; ?>
          </tr>
        <?php endif; ?>
        <tr>
          <td><?php echo $value['area']; ?></td>
          <td><?php echo $value['material']; ?></td>
          <td><?php echo $value['totalQty']; ?></td>
        </tr>
        <?php if ($value['area'] == $prevArea): ?>
          <tr class="bg-success">
            <td colspan="3"><?php echo $total; ?></td>
          </tr>
        <?php endif; ?>       
      <?php endforeach ?>
      </tbody>
    </table>
  </div> 
<?php endif ?>

查询:

SELECT d.SOffcNm as area,
           c.ProdNm as material,
           SUM(Qty) as totalQty
    FROM   BigEMerchandiser.dbo.tbl_Delivery_H as a

           INNER JOIN BigEMerchandiser.dbo.tbl_Delivery_D as b
           ON a.TransCtr = b.TransCtr

           INNER JOIN BigESales.dbo.tbl_Materials as c
           ON b.Material = c.ExtMatGrp

           INNER JOIN BigESales.dbo.tbl_Customers as d
           ON a.CustCode = d.CustCode

           WHERE d.SOffc LIKE ISNULL('%' + @area + '%', d.SOffc) 
           AND a.DtRcv BETWEEN @DtRcvFrom AND @DtRcvTo
GROUP BY   d.SOffcNm,
           c.ProdNm
ORDER BY   d.SOffcNm asc

目前的结果:

谢谢。我感谢您的帮助。

php html mysql
2个回答
1
投票

尝试根据下面代码中的注释更改代码(仅限foreach部分)

  <?php foreach ($summaryPerArea as $key => $value): ?>
    <?php if ($value['area'] != $prevArea and $prevArea): // show total when changing area from second area onward ?>
      <tr class="bg-success">
        <td colspan="3"><?php echo $total; ?></td>
      </tr>
      <?php $total = 0; // reset the total after displaying it ?>
    <?php endif; ?>       
    <?php if ($value['area'] != $prevArea):// show area header at every area change ?>
      <tr class="bg-info">
        <td colspan="3"><?php echo $value['area']; ?></td>
      </tr>
    <?php endif; ?>
    <?php //$currentQty = $value['totalQty']; // does not needed ?>
    <?php $total += $value['totalQty']; ?>
    <tr>
      <td><?php echo $value['area']; ?></td>
      <td><?php echo $value['material']; ?></td>
      <td><?php echo $value['totalQty']; ?></td>
    </tr>
    <?php $prevArea = $value['area']; // set prevArea to the processed row ?>
  <?php endforeach ?>
  <?php // show the last total ?>
  <tr class="bg-success">
    <td colspan="3"><?php echo $total; ?></td>
  </tr>

请注意,行的顺序重复如下:

--area total--
--area header--
--area item--

然后是:

--area total--

在第一个foreach,prevArea仍然是''所以--area total--and $prevArea)的第一个条件将导致false,因此--area total--被抑制,但--area header--没有那个条件,所以--area header--没有被抑制。


0
投票

我使用不同的php语法,使用if(condition){code};

如果我理解你的问题,我会做一个不同的解决方案,我控制下一个是否与我现在使用的值不同,因为如果它不同,你需要打印。

我像这样重写你的代码:

<tbody>
  <?php 
    $prevArea = 'AnElementLikeFlag';
    $total = 0;
    $currentQty = 0;
  ?>
  <?php foreach ($summaryPerArea as $key => $value): ?>
    <?php $currentQty = $value['totalQty']; ?>
    <?php if ($value['area'] != $prevArea && $value['area']!="AnElementLikeFlag"): ?>

      <tr class="bg-success">
        <td colspan="3"><?php echo $total; ?></td>
      </tr>
      <tr class="bg-info">
        <td colspan="3"><?php echo $value['area']; ?></td>
        <?php $prevArea = $value['area']; ?>
      </tr>
    <?php $total=0; ?>
    <?php endif; ?>
    <?php $total += $value['totalQty']; ?>
    <tr>
      <td><?php echo $value['area']; ?></td>
      <td><?php echo $value['material']; ?></td>
      <td><?php echo $value['totalQty']; ?></td>
    </tr>

  <?php endforeach ?>
  </tbody>

我希望我帮助你,我可能会犯一个错误。

附:你每次打印总数,因为有一个if条件,它不是必要的

© www.soinside.com 2019 - 2024. All rights reserved.