0

我应该在帖子正文中显示评论编号。但是帖子正文在while中,如果我在while页面中放置评论num查询,那么就会很重!

我正在尝试做但不工作:

$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;
    }
}
4

2 回答 2

1

如果您只需要帖子中的评论数量,而不需要评论内容。然后在连接查询中使用COUNT子句:

$post_query = "SELECT *, COUNT(comment.id) AS comment_num 
FROM post JOIN comment ON comment.post_id = post.id
GROUP BY post.id;"

if($post_query) {
  while($post_data = mysql_fetch_array($post_query)) {
    $postid = $post_data['id'];
    $comment_num = $post_data['comment_num'];
    $post_temp = $post;
    $posts .= $post_temp;
  }
}

检查工作演示

于 2013-01-13T19:00:15.780 回答
1

On 应该很少需要从循环中查询数据库:通常可以构造一个返回所有所需结果的查询,然后遍历该结果集——这几乎总能提高性能。

与其通过一个查询来获取帖子,而是在该结果集上循环并通过另一个查询来获取每个帖子的评论,而是将您的表连接在一起;在不知道您的架构或查看您的 SQL 的$post_query情况下,无法确定,但您可能想要这样的东西:

SELECT   *
FROM     posts LEFT JOIN comments USING (postid)
WHERE    blogid = '$bid'
ORDER BY postid

然后遍历结果,通过检查postid列来检测您何时遇到新帖子。

于 2013-01-13T19:08:42.307 回答