1

カテゴリ X に関連するすべての投稿を表示するページがあります。各投稿に関連するコメントの表示に問題があります。

関連するデータベース テーブルは次のとおりです。

TABLE 'articles'
'article_id'
'title'
'article'
'updated'
'created'

TABLE 'categories'
'cat_id'
'category'

TABLE 'article2cat' (relates an article to a category using two primary keys)
article_id
cat_id

TABLE 'comments'
comment_id
comment
user
created

TABLE 'comment2article' relates a comment to an article using two primary keys)
comment_id
article_d

記事とコメントを取得する SQL クエリは次のとおりです。

SELECT articles.article_id, articles.title, articles.article, DATE_FORMAT(articles.created, "%b, %Y") AS date_created, comments.comment_id, comments.user, comments.comment 
FROM articles INNER JOIN article2cat USING (article_id), comments INNER JOIN comment2article USING (comment_id)
WHERE cat_id=4
ORDER BY articles.created DESC;

記事とコメントを表示するコードは次のとおりです。

<table id="articles-table" cellpadding="0" cellspacing="0">
    <?php while ($row = $result->fetch_assoc()) { ?>
    <tr>
        <td id="articles-article">
            <div id="articles-article-internal">
                <?php echo format($row['article']); ?></div>
        </td>
    </tr>
    <tr>
        <td><?php echo $row['comment']; ?></td>
    </tr>
    <tr>
        <td>&nbsp;</td>
    </tr>
    <?php } ?>
</table>

問題は、特定の投稿/記事に関連するコメントのみをエコーアウトしようとするときです。現時点では、投稿に関係なくすべてのコメントを表示しています。

StackOverflow で同様の質問をいくつか見つけましたが、問題を解決するために使用できたものはありませんでした。

4

1 に答える 1

1

記事とコメントを別々に選択します。クエリの結果を見てください。コメントごとに、記事のすべてのコピーを取得します。そして、コメント数が増えるとどうなりますか?例えば。5000 文字程度の記事が 1 件あります。クエリを実行すると、5000 バイト近くのデータが得られます。しかし、あなたの記事に 200 件のコメントがあるとしたら? クエリの結果は、約 5000*200 + すべてのコメント バイトです。

SELECT comments.*
FROM comments INNER JOIN comment2article USING (comment_id)
WHERE comment2article.article_d= ID of article
ORDER BY comments.created DESC;
于 2012-07-21T07:58:02.087 に答える