我应该在帖子正文中显示评论编号。但是帖子主体在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列来检测何时遇到新帖子。

07-25 22:50
查看更多