2015-10-17 61 views
0

我在DB兩個表:項目表(GOODS1)和訂單表(KB)。在kB中,每個訂單項等於單行,這意味着在適當的列中具有相同賬單號的2個項目的順序= 2行。 IU希望將所點項目,以每個單號 我有以下幾點:PHP的MySQL的foreach回聲錯誤

<? 
... 

$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 | 

,但如果我有超過2線每個「B」( 1次項),那麼它打印這樣的:

| 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 | 

我試過了,但是我找不到解決方案。有人可以幫忙嗎?

+0

預期產量是多少? – Berriel

+0

你在哪裏打印標籤? – Thesee

回答

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的。


提出最小的改變,但是確定你需要重新思考你的代碼結構。

+0

@ Berriel你的建議是不打印每個'B'的第一行。如果有2條線,然後它打印1,如果有3個是打印2 ..... – ceyrslan

+0

@ceyrslan SRY,'array_shift'還在那裏,嘗試更新的版本 – Berriel

+0

仍然沒有變化,仍然2,而不是三個1而不是2只現在我每次收到最後顯示的線**注意:未定義的偏移:1 ** – ceyrslan