mysqli_fetch_assoc循环在另一个mysqli_fetch_assoc循环内部

时间:2013-02-05 19:20:38

标签: php mysql nested-loops

我一直在网上搜索一段时间试图找到这个答案,但也许我的搜索主题是不对的。我有一个SQL查询,它将两个表中的数据返回到一个组合结果集中。我想循环查找每个“部分”并将其打印出来,并在每个“部分”下面打印出与该部分相关的事件。我基本上有一个父循环来查找“sections”和父循环内部的子循环来搜索事件。我的代码如下。

任何人都可以解释为什么父循环只迭代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

2 个答案:

答案 0 :(得分:2)

在内循环中将结果集耗尽。

如果你的结果有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
  }
}

答案 1 :(得分: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
       }
    }