というテーブルとcategories
というテーブルがありますbusiness_categories_coupling
。カテゴリには、通常のid
、name
、がありparent
ます。カップリング テーブルには、 と がbusiness_id
ありcategory_id
ます。各ビジネスには複数のカテゴリがある可能性があるため、そのテーブルに格納します。次のようになります。
business_id category_id
73 80
73 81
73 90
74 4
74 10
現在、私のクエリはすべてのカテゴリを選択し、foreach を実行し、各ループで db クエリを実行して、そのカテゴリに含まれるビジネスの数を見つけています。明らかに正しい方法ではありません。
基本的にすべてのカテゴリを選択し、結合テーブルに表示される回数を取得し、各カテゴリにカウントを追加する SQL クエリを実行する方法はありますか?
SELECT
C.*
FROM
CATEGORIES AS C
LEFT JOIN
BUSINESS_CATEGORIES_COUPLING AS B
ON
C.id = B.category_id;
そのようなものですが、どこかにカウントがあります。さまざまな設定を試しましたが、思いどおりに動作しません。助言がありますか?
編集1
@phani-rahul が提供するソリューションですが、WHERE 句を追加しました。
SELECT cat.id AS id, cat.name AS name, cat.slug AS slug, COUNT(cat.id) AS business_count
FROM categories AS cat
LEFT JOIN business_categories_coupling AS coupling ON cat.id=coupling.category_id
WHERE coupling.category_id IS NOT NULL
GROUP BY cat.id