我应该在帖子正文中显示评论数字。但是帖子的身体在那里,如果我在页面上放置评论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;
}
}
答案 0 :(得分: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;
}
}
答案 1 :(得分:1)
应该很少必须从循环内查询数据库:通常可以构造一个返回所有所需结果的查询,然后遍历该结果集 - 这几乎总能提高性能
不是使用一个查询获取帖子,循环遍历该结果集并使用另一个查询获取每个帖子的评论,而是将表连接在一起;不知道你的架构或看到你的$post_query
的SQL是不可能确定的,但你可能想要这样的东西:
SELECT *
FROM posts LEFT JOIN comments USING (postid)
WHERE blogid = '$bid'
ORDER BY postid
然后循环搜索结果,通过检查postid
列来检测您何时遇到新帖子。