0

この答えを見つけようとしてしばらくインターネットを検索してきましたが、検索トピックが正しくない可能性があります。2 つのテーブルのデータを組み合わせた結果セットに返す 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行がある場合、外側は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変数にヒットしているため、使用可能な行を使い果たして反復します。

次の2つのクエリを実行するのが最適です。

    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 に答える