我应该在帖子正文中显示评论编号。但是帖子主体在while中,如果我将评论num查询放在while页面中而又很重!
我正在尝试但无法正常工作的内容:
$comments_data = mysql_query("SELECT * FROM `comments` WHERE `blogid`='$bid' AND `postid`='$postid'") or die(mysql_error());
$coments_num = mysql_num_rows($comments_data);
if($post_query) {
while($post_data = mysql_fetch_array($post_query)) {
$postid = $post_data['id'];
$post_temp = $post;
$post_temp = str_replace('[post_comments]',$coments_num,$post_temp);
$posts .= $post_temp;
}
}
但是如果我这样使用将起作用:(但是有很多查询!)
if($post_query) {
while($post_data = mysql_fetch_array($post_query)) {
$postid = $post_data['id'];
$comments_data = mysql_query("SELECT * FROM `comments` WHERE `blogid`='$bid' AND `postid`='$postid'") or die(mysql_error());
$coments_num = mysql_num_rows($comments_data);
$post_temp = $post;
$post_temp = str_replace('[post_comments]',$coments_num,$post_temp);
$posts .= $post_temp;
}
}
最佳答案
On很少需要从循环内查询数据库:通常可以构造一个查询,该查询返回所有所需结果,然后在该结果集上循环,这几乎总是可以提高性能。
将表连接在一起,而不是通过一个查询来获取帖子,而是遍历该结果集并通过另一个查询来获取每个帖子的评论。不知道您的架构或查看$post_query
的SQL是不可能的,但是您可能想要这样的东西:
SELECT *
FROM posts LEFT JOIN comments USING (postid)
WHERE blogid = '$bid'
ORDER BY postid
然后遍历结果,通过检查
postid
列来检测何时遇到新帖子。