0

投稿本文にコメント番号を表示する必要があります。しかし、投稿本文はその間にあり、コメント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;
    }
}
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

ループ内からデータベースにクエリを実行する必要はほとんどありません。多くの場合、目的の結果をすべて返すクエリを作成してから、その結果セットをループすることができます。これにより、ほとんどの場合、パフォーマンスが向上します。

1 つのクエリで投稿を取得し、その結果セットをループして、別のクエリで各投稿のコメントを取得する代わりに、テーブルを結合します。スキーマを知らなかったり、自分の SQL を見たり$post_queryしなければ、確実なことは言えませんが、おそらく次のようなものが必要になるでしょう:

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

次に、結果をループし、列を調べて新しい投稿に遭遇したことを検出しpostidます。

于 2013-01-13T19:08:42.307 に答える