すべてのカテゴリ、サブカテゴリを選択し、サブカテゴリに属するビジネスの数を数えたいです。これは私が使用しているSQlクエリです。
SELECT
c.id,
c.name,
c.slug,
sc.id,
sc.name,
sc.slug,
COUNT(bsc.id) AS business_count
FROM
fi_category c
LEFT JOIN
fi_subcategory sc ON c.id = sc.category_id AND (sc.deleted_at IS NULL)
LEFT JOIN
fi_business_subcategory bsc ON sc.id = bsc.subcategory_id AND (bsc.deleted_at IS NULL)
WHERE
(c.deleted_at IS NULL)
GROUP BY
c.id, sc.id
ただし、やりたいことがもっとあります。business_countは、所属する都市に応じてフィルタリングする必要があります。つまり、最終的にはすべてのカテゴリ、サブカテゴリを選択する必要がありますが、business_countには、のような句が必要WHERE city.id = 1
です。これには、countをサブクエリとして使用する必要があると思います。私はそれを理解することができませんでした。
以下は、からfi_business_subcategory
への関係構造fi_city
です。
1)fi_business_subcategory
+----+----------------+-------------+
| id | subcategory_id | business_id |
+----+----------------+-------------+
2)fi_business
+----+---------+-----------+
| id | name | suburb_id |
+----+---------+-----------+
3)fi_suburb
+-----+--------+---------+
| id | name | city_id |
+-----+--------+---------+
4)fi_city
+----+--------+
| id | name |
+----+--------+
私はこのようなことを試みましたが、これはうまくいかないようです
SELECT
c.id,
c.name,
c.slug,
sc.id,
sc.name,
sc.slug,
bsc.business_count
FROM
fi_category c
LEFT JOIN
fi_subcategory sc ON c.id = sc.category_id AND (sc.deleted_at IS NULL)
LEFT JOIN (
SELECT
COUNT(business_id) t1.business_count, t1.subcategory_id
FROM
fi_business_subcategory t1
LEFT JOIN
fi_business t2 ON t2.id = t1.business_id
LEFT JOIN
fi_suburb t3 ON t3.id = t2.suburb_id
LEFT JOIN
fi_city t4 ON t4.id = t3.city_id
WHERE
t4.id = 1
GROUP BY
t1.subcategory_id
) bsc ON sc.id = bsc.subcategory_id AND (bsc.deleted_at IS NULL)
WHERE
(c.deleted_at IS NULL)
GROUP BY
c.id, sc.id
クエリを作成して、必要なものを実現するにはどうすればよいですか?