我一直在网上搜索一段时间试图找到这个答案,但也许我的搜索主题是不对的。我有一个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
答案 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
}
}