以下进入无限循环,这意味着它不断地一遍又一遍地显示相同的记录。
<?php
while ($rowr = mysql_fetch_assoc(mysql_query("SELECT * FROM table1")) {
while($rowu = mysql_fetch_assoc(mysql_query("SELECT * FROM table2 WHERE id = '".$rowr['uid']."'"))){
while($rowc = mysql_fetch_assoc(mysql_query("SELECT * FROM table3 WHERE id = '".$rowr['cid']."'"))){
?>
<tr><td><?php echo $rowc['post']; ?></td><td><a href="other.php?id=<?php echo $rowu['id']; ?>"><?php echo $rowu['username']; ?></a></td><td><a href="this.php?p=d&i=<?php echo $rowr['id']; ?>"><font color="#FF0000">X</font></a></td></tr>
<?php
};
};
};
?>
为什么会发生这种情况,我该如何解决?
答案 0 :(得分:7)
你将mysql查询放在while
语句中,所以每次它到达那里它会执行相同的查询并显示相同的第一条记录,你永远不会前进到结果集中的下一条记录。
我个人会将所有查询合并为一个,但是要说明如何解决问题(同样适用于所有循环):
$results = mysql_query("SELECT * FROM table3 WHERE id = '".$rowr['cid']."'");
while ($rowc = mysql_fetch_assoc($results))
{
// do stuff
}
答案 1 :(得分:2)
只是因为每次检查循环条件时都会再次执行查询。这意味着除非在此期间数据库发生变化,否则您将始终获得相同的结果。
你需要这样的东西:
<?php
$res1 = mysql_query("SELECT * FROM table1");
while ($rowr = mysql_fetch_assoc($res1)) {
$res2 = mysql_query("SELECT * FROM table2 WHERE id = '".$rowr['uid']."'");
while($rowu = mysql_fetch_assoc($res2)){
$res3 = mysql_query("SELECT * FROM table3 WHERE id = '".$rowr['cid']."'");
while($rowc = mysql_fetch_assoc($res3)){
?>
<tr><td><?php echo $rowc['post']; ?></td><td><a href="other.php?id=<?php echo $rowu['id']; ?>"><?php echo $rowu['username']; ?></a></td><td><a href="this.php?p=d&i=<?php echo $rowr['id']; ?>"><font color="#FF0000">X</font></a></td></tr>
<?php
}
}
}
?>
这只是为了说明它为什么不起作用。正如其他人已经指出的那样,建议您使用JOIN将查询合并为一个。
顺便说一句,;
阻止后你不需要{}
。
答案 2 :(得分:0)
答案 3 :(得分:0)
您在每次循环迭代时重新执行查询,从头开始重新启动结果。
你想要这样的东西:
$resultR = mysql_query("... table1");
while($rowR = mysql_fetch_assoc($resultR)) {
$resultU = mysql_query("... table2");
while($rowU = mysql_fetch_assoc($resultU)) {
etc...
}
}
当然,这是一种非常低效的结构。最终运行count($ rowR)* count($ rowU)* count($ rowC)查询。为什么不把它重新表述为一个加入?