2012-03-26 110 views
2

我有一個PHP/MySQL查詢返回到一個HTML表格,並且我被卡在一部分,我需要在該查詢中創建第二個while循環。我不確定該從哪裏出發。我嘗試了幾種不同的方法。另一個'while'循環中的PHP'while'循環或'if'語句?

我希望它循環並給我第一組數據,然後使用「Order_ID」並獲取第二組數據,並將第二組數據放入第一個循環,然後重新執行。

這裏就是我有...

<?php 
    $arrayLC = array(); 

    $OrdersToShip = mysql_query(" 
     SELECT * 
     FROM Orders o 
     WHERE o.LotCoded = 0 ORDER BY o.Order_ID"); 

    if ($OrdersToShip) { 
     while ($info = mysql_fetch_array($OrdersToShip)) 
     { 
      $Order_ID = $info['Order_ID']; 
      $Customer_ID = $info['Customer_ID']; 
      $OrderDate = $info['OrderDate']; 

      $lotCodes = mysql_query("SELECT lotCode, Qty FROM `OrdersLotCodes` WHERE `Order_ID` = '".$Order_ID."'"); 

      if($lotCodes) { 
       while ($info = mysql_fetch_array($lotCodes)) 
       { 
        $lotCode = $info['lotCode']; 
        $Qty = $info['Qty']; 
        array_push($arrayLC, $lotCode, $Qty); 
       } 
      } 

      echo '<tr class="OLine"> 
       <td><input type="button" class="button viewThis" value="VIEW"></td> 
       <td>'.$Order_ID.'</td> 
       <td>'.$Customer_ID.'</td> 
       <td>'.$OrderDate.'</td> 
       <td>'.print_r($arrayLC).'</td> 
       </tr>'; 
     } 
    } 
    else { 
     echo "encountered an error.".mysql_error(); 
    } 
    mysql_close($conn); 
?> 

我缺少什麼?我該怎麼辦?

::編輯::

我已經改變了mysql_query到:

SELECT o.Order_ID, o.Customer_ID, o.OrderDate, olc.lotCode, olc.qty 
FROM Orders o 
LEFT JOIN OrdersLotCodes olc ON o.Order_ID = olc.Order_ID 
WHERE o.LotCoded = 0 ORDER BY o.Order_ID 

現在,我將如何採取與OrderLotCodes輸出,並把它們放到一個數組要在印刷表?我如何將它們放入一個數組,然後通過Order_ID引入相關的一個?

回答

4

我可以看到的一個問題是,您不重置$arrayLC裏面的外部while循環;因此,每個訂單的代碼都會附加到前一個訂單的代碼中,並且無限。

if($OrdersToShip) { 
    while ($info = mysql_fetch_array($OrdersToShip)) { 

    $arrayLC = array(); // SHOULD BE IN HERE! 

除此之外,當你得到這個代碼的工作,你應該考慮的是N個訂單,該代碼執行N + 1個查詢的事實(1,讓每爲了獲得項目訂單,一個) 。考慮到如果您執行left outer join,您可以通過一個查詢檢索相同的信息,這是一種非常低效的方式。所以你的下一站應該在SQL joins上閱讀,以及它們如何幫助你檢索相關數據。

+0

請參閱編輯。 – Monty 2012-03-26 17:41:55