0

私は3つのテーブルを持っています。カテゴリ、トピック、および投稿。各トピックには、それが属するカテゴリを参照する外部キーがあります。各投稿には、その下にあるトピックを参照する外部キーがあります。

このクエリの目的は、基本的にフロント ページ クエリになることです。各カテゴリと、各カテゴリのトピック数と投稿数が必要です。これは私が持っているクエリであり、機能します。これが最も簡単な方法ですか?

SELECT      c.*,
            COUNT(t.idCategory) AS tCount,
            p.pCount
FROM        categories AS c
  LEFT JOIN topics AS t
  ON        c.id = t.idCategory
  LEFT JOIN (SELECT      t.idCategory,
                         COUNT(p2.idTopic) AS pCount
             FROM        topics AS t
               LEFT JOIN posts AS p2
               ON        t.id = p2.idTopic
             GROUP BY    t.idCategory) AS p
  ON         c.id = p.idCategory
GROUP BY     t.idCategory
ORDER BY     c.id

ありがとう!

4

2 に答える 2

1

シンプルさについて話しているなら、これが答えになると思います:

Select 
      c.*,
      (Select count(*) from topic t where c.id = t.idCategory) as tCount,
      (Select count(*) from posts p join topics t2 on t2.id = p.idTopic where c.id = t2.idCategory) as pCount
From categories c
于 2012-04-18T00:52:18.470 に答える
0

カテゴリに結合する前に、まず派生テーブル内のトピックと投稿をまとめることができます。

SELECT 
    c.id,
    COUNT(tp.id) AS TotalTopics,
    tp.TotalPosts
FROM categories AS c
    LEFT JOIN (
        SELECT 
            t.id,
            t.idCategory,
            COUNT(p.id) AS TotalPosts
        FROM topics AS t 
            LEFT JOIN posts AS p ON t.id = p.idTopic
        GROUP BY    
            t.id,
            t.idCategory) AS tp ON c.id = tp.idCategory
GROUP BY 
    c.id,
    tp.TotalPosts
ORDER BY c.id
于 2012-04-18T01:16:22.850 に答える