0


私は3つのテーブルを持っています。

1.fi_category

+----+-----------------+-----------------+
| id | name            | slug            |
+----+-----------------+-----------------+

2.fi_subcategory

+----+-----------------+-----------------+-------------+
| id | name            | slug            | category_id |
+----+-----------------+-----------------+-------------+

3.fi_business_subcategory

+----+-------------+----------------+
| id | business_id | subcategory_id |
+----+-------------+----------------+

私が基本的にやろうとしていることは、

  1. すべてのカテゴリを取得する
  2. カテゴリに属する​​すべてのサブカテゴリを取得します。
  3. 特定のサブカテゴリに存在するビジネスの数を数えます。

これは私がやってみたものです。

SELECT 
    f.id,
    f.name,
    f.slug,
    f2.id,
    f2.name,
    f2.slug,
    COUNT(f3.business_id) as count
FROM
    fi_category f
LEFT JOIN 
    fi_subcategory f2 ON f.id = f2.category_id
LEFT JOIN 
    fi_business_subcategory f3 ON f2.id = f3.subcategory_id

ただし、上記のクエリは 1 つのレコードのみをフェッチします。欲しいものを取得するにはどうすればよいですか?

4

1 に答える 1

2

GROUP BY私は句を追加します:

SELECT 
    f.id,
    f.name,
    f.slug,
    f2.id,
    f2.name,
    f2.slug,
    COUNT(f3.business_id) as count
FROM fi_category f
LEFT JOIN fi_subcategory f2 
    ON f.id = f2.category_id
LEFT JOIN fi_business_subcategory f3 
    ON f2.id = f3.subcategory_id
GROUP BY f.id,
    f.name,
    f.slug,
    f2.id,
    f2.name,
    f2.slug

または、サブクエリで取得count()します。

SELECT f.id,
    f.name,
    f.slug,
    f2.id,
    f2.name,
    f2.slug,
    f3.cnt
FROM fi_category f
LEFT JOIN fi_subcategory f2 
    ON f.id = f2.category_id
LEFT JOIN
(
    select count(business_id) cnt, subcategory_id 
    from fi_business_subcategory
    group by subcategory_id
) f3 
    ON f2.id = f3.subcategory_id
于 2012-09-11T13:54:25.173 に答える