2013-02-05 43 views
0

我一直在尋找一段時間的互聯網試圖找到這個答案,但也許我的搜索主題是不正確的。我有一個SQL查詢,它將兩個表中的數據返回到一個組合結果集中。我想循環查找每個「部分」並將其打印出來,並在每個「部分」下方打印出與該部分相關的事件。我基本上有一個父循環尋找「部分」和父循環內的子循環來搜索事件。我的代碼如下。mysqli_fetch_assoc循環內的另一個mysqli_fetch_assoc循環

任何人都可以解釋爲什麼父循環只迭代1次,然後停止?我一定會很感激!

while ($row = mysqli_fetch_assoc($result)) { 
    if($row['ID'] != "") { 
     echo '<h3 class="classTlt">'.$row['sTitle'].'</h3>'; 
     echo $row['sDesc']; 
     $table = '<table cellpadding="0" cellspacing="0" width="100%" border="0"> 
        <tr>'; 
     for($i=1;$i<=6;$i++) { 
     if($row['sH'.$i] != null) { 
      $table .= '<th>'.$row['sH'.$i].'</th>'; 
     } 
     } 
     $table .= '</tr>'; 
     while ($row2 = mysqli_fetch_assoc($result)) { 
     if($row2['sID'] == $row['ID']) { 
      $table .= '<tr>'; 
      for($x=1;$x<=6;$x++) { 
      if($row2['sV'.$x] != null) { 
       $table .= '<td valign="top">'.$row2['sV'.$x].'</td>'; 
      }//end if 
      }//end for 
      $table .= '</tr>'; 
     }//end if 
     }//end while 
     $table .= '</table>'; 
     echo $table; 
    }//end if 
}//end while 

回答

1

將內部循環中的結果集幹掉。

如果您的結果有10行,則外部提取1時,內部提取其他9,而外部沒有任何提取。

編輯: 有關的意見:

$someArray = array(); 
while ($row = mysqli_fetch_assoc($result)) { 
    $someArray[] = $row; 
} 

for ($i = 0; $i < count($someArray); ++$i) { 
    // some stuff 

    for($j = 0; $j < count($someArray); ++$j) { 
    // some more stuff 
    } 
} 
+0

說得好。爲你+1。 – Achrome

+0

@scones - 那麼我會如何防止呢?對不起,我還在學習PHP。 – Leann

+0

@scones - 實際上,在兒童循環中,我想從結果集的最開始處開始,而不是第2個記錄。那麼我怎麼能夠使用我的結果集爲兩個循環? – Leann

0

while迴路擊中同一$result變量,並因此耗盡可用的行進行迭代。

您將提供最好的服務有兩個疑問:

while ($row = mysqli_fetch_assoc($result)) { 
     // some logic/display code 

     $result2 = ... // sql query w/ section data 

     while ($row2 = mysqli_fetch_assoc($result2)) { 
      // more logic/display code 
     } 
    } 
+0

我的印象是,儘可能減少對數據庫的查詢次數是避免冗長的頁面加載時間的最佳做法。當然,有些情況下需要多個查詢,但我發現在這種情況下我可以進行一個查詢。什麼被認爲是最佳實踐? – Leann

+0

如果你知道行數,即行0是一個標題,並且5行將始終是子行,那麼行6將是一個標題等,然後@scones解決方案將工作。 良好的做法,是的,減少查詢。但是我們在討論多少個查詢?數據集有多大?如果數據集不會變得臃腫,而且您也沒有編寫大量的應用程序,那麼這兩個查詢更容易理解,更易於閱讀,從而更好地實現。 –

+0

感謝您的支持。作爲學習的一部分,我仍然需要找到更多關於哪些方法在某些情況下最好的文檔。我感謝您的建議! – Leann