我有一个php循环,即使有数百个也只显示一条记录。
这是代码:
<?php
$result1 = mysql_query("SELECT * FROM posts") or die(mysql_error());
$numexem = mysql_num_rows($result1);
$s="0";
while($s<$numexem){
$postid=mysql_result($result1,$s,"id");
echo "Post id:".$postid;
$result2 = mysql_query("SELECT * FROM pics WHERE postid='$postid'") or die(mysql_error());
$rows = mysql_fetch_array($result2) or die(mysql_error());
$pnum = mysql_num_rows($result2);
echo " There is ".$pnum." Attached Pictures";
$s++;
}
?>
我想知道循环是否停止,因为里面还有其他SQL查询或者什么? 我不这么认为。
由于
答案 0 :(得分:2)
我建议采用更传统的方法:
$result1 = mysql_query("SELECT * FROM posts") or die(mysql_error());
while ($row = mysql_fetch_assoc($result1)) {
...
}
此外,不要执行所有这些从属查询。代替:
$sql = <<<END
SELECT *, (SELECT COUNT(1) FROM pics WHERE postid = p.postid) pic_count
FROM posts p
END;
$res = mysql_query($sql) or die($sql . ': ' . mysql_error());
while ($row = mysql_fetch_assoc($res)) {
echo "$row[postid] has $row[pic_count] pictures\n";
}
答案 1 :(得分:0)
不,它不会。默认情况下,MySQL PHP模块会预取与您的查询匹配的所有行,因此您的代码无需担心。
但是,执行一百个查询可能非常耗时。您宁愿收集第一个循环中的所有ID,然后使用SQL IN
运算符执行一个单个查询,然后获取这些结果。尽可能避免“嵌套”查询。