php mysql foreach echos错误

时间:2015-10-17 20:01:25

标签: php mysql foreach

我在db中有两个表:item表(goods1)和order表(kB)。在kB中,每个订单项等于单个行,表示2个项目的顺序= 2个行,在相应的列中具有相同的帐单编号。 IU想要将订购的商品分组到每个帐单号码 我得到了以下内容:

 <?
 ...

 $sql = $conn->query("
 SELECT 
 kB.BillNum AS B, goods1.*, 
 GROUP_CONCAT(goods1.ArtName) AS bestArts, 
 GROUP_CONCAT(goods1.ArtNrAttach) AS ArtNrAttachs, 
 GROUP_CONCAT(kB.Menge) AS Menges,
 FROM 
 kB, goods1 
 WHERE kB.bestArt = goods1.id 
 AND kB.ordDate LIKE '%$datum_seek%' 
 GROUP BY kB.BillNum");

 if(mysqli_error($conn)){ echo " ERROR";}
 ELSE IF(!mysqli_error($conn)){


 echo'<table colspan="6" style="border:1px solid black;">
      <tr>
      <th colspan="1">bill number</th>
      <th colspan="1">item</th>
      <th colspan="1">item nummer</th>
      </tr>';

 while($row = $sql->fetch_assoc()) {

 $bestArts     = split(",",$row["bestArts"]);
 $ArtNrAttachs = split(",",$row["ArtNrAttachs"]);
 $Menges       = split(",",$row["Menges"]);

 echo '<tr><td style="background-color:lightblue;">'. $row["B"].'</td>';
 ?>
 <td><?php echo $bestArts[0]; array_shift($bestArts); ?></td>
 <td><?php echo $ArtNrAttachs[0]; array_shift($ArtNrAttachs); ?></td>
 <td><?php echo $Menges[0]; array_shift($Menges); ?></td>
 </tr>
 <tr>
 <td></td>

 <?php 
    foreach($bestArts as $bestArt):
      echo '<td>' . $bestArt .'</td>';
      endforeach;

    foreach($ArtNrAttachs as $ArtNrAttach):
      echo '<td>' . $ArtNrAttach .'</td>';
      endforeach;

    foreach($Menges as $Menge): 
      echo '<td>' . $Menge .'</td>';
      endforeach;

    ...

这打印好了:

| B | ArtName | ArtNr | Menge |
    | ArtName | ArtNr | Menge |
| B | ArtName | ArtNr | Menge |
    | ArtName | ArtNr | Menge |

但如果我为每个'B'(1个订单的项目)有超过2行,那么它打印如下:

| B | ArtName | ArtNr | Menge |
    | ArtName | ArtNr | Menge |
| B | ArtName | ArtNr | Menge |
    | ArtName | ArtNr | Menge |
    | ArtName | ArtName |ArtNr | ArtNr | Menge | Menge |

预期产出:

| B | ArtName | ArtNr | Menge |
    | ArtName | ArtNr | Menge |
| B | ArtName | ArtNr | Menge |
    | ArtName | ArtNr | Menge |
    | ArtName | ArtNr | Menge |

我试过,但我找不到解决方法。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

如果预期输出为:

| B | ArtName | ArtNr | Menge |
    | ArtName | ArtNr | Menge |
| B | ArtName | ArtNr | Menge |
    | ArtName | ArtNr | Menge |
    | ArtName | ArtNr | Menge |
    | ArtName | ArtNr | Menge |

您可以将代码更改为:(假设$bestArts$bestArts$ArtNrAttachs具有相同的尺寸)

<?php for ($i = 0; $i < count($bestArts); $i++) { ?>
    <td><?php echo $bestArts[$i];?></td>
    <td><?php echo $ArtNrAttachs[$i];?></td>
    <td><?php echo $Menges[$i];?></td>
<?php } ?>

删除foreach's。

提出最小的更改,但确定您需要重新考虑代码结构。