1

メッセージ ボードを作成していて、クエリを作成しようとしています。私のデータベース構造は次のとおりです。

テーブル名:テーブル行、テーブル行

カテゴリ: id、名前
トピック: id、categoryid
投稿: id、topicid

ホームページでは、各カテゴリと、各カテゴリのトピック数と投稿数を一覧表示したいと思います。複数の結合を使用するいくつかのクエリを見てきましたが、私の状況に構文を適用するのに問題があります。

これが私が思いついたものです:

SELECT `categories`.`id`, `categories`.`name`,  
    SELECT COUNT(DISTINCT `topics`.`id`) 
    FROM `topics`
    WHERE `topics`.`categoryid` = `categories`.`id`
    AS `numtopics`,
    SELECT COUNT(DISTINCT `posts`.`id`)
    FROM `posts`
    WHERE `posts`topicid` = `topics`.`id` 
    AS `numposts`
FROM `categories` 
JOIN `topics` ON `categories`.`id` = `topics`.`categoryid` 
JOIN `posts` ON `topics`.`id` = `posts`.`topicid`
;

topicid に基づいて投稿の数をカウントし、それを最初の結合によって作成されたテーブルと結合しようとすると、混乱し始めます。私がしていることをすることは可能ですか?もしそうなら、私はそれを正しく行っていますか?

4

1 に答える 1

2
SELECT `categories`.`id`, `categories`.`name`,
   COUNT(DISTINCT topics.id) as topics,
   COUNT(DISTINCT posts.id) as posts
FROM `categories` 
LEFT JOIN `topics` ON `categories`.`id` = `topics`.`categoryid` 
LEFT JOIN `posts` ON `topics`.`id` = `posts`.`topicid`
GROUP BY categories.id

...しかし、関連するすべての投稿とトピックを取得すると、サーバーに負荷がかかる場合があります。少しの間、どこかにキャッシュします。

于 2013-05-01T21:18:52.777 に答える