0

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

谁能解释为什么父循环只迭代 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
4

2 回答 2

3

您在内部循环中将结果集排干。

如果您的结果有 10 行,则外部 while 提取 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
  }
}
于 2013-02-05T19:23:21.333 回答
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
       }
    }
于 2013-02-05T19:25:03.817 回答