【发布时间】:2023-03-09 14:18:01
【问题描述】:
我想选择所有类别,子类别并计算属于子类别的业务数量。这是我正在使用的 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 这样的子句,我猜我必须使用计数作为我无法弄清楚的子查询。
下面是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
我应该如何构建查询以实现我想要的?
【问题讨论】:
-
你能把你的表结构发到sqlfiddle.com
-
@raheelshan 这是表格结构,对于迟到的回复,我深表歉意。 sqlfiddle.com/#!2/33275
-
对不起@Ibrahim Azhar Armar 但你能不能也提供一些数据
-
@raheelshan 当然,我很抱歉没有添加任何数据。现在就去做。
-
@raheelshan 添加了示例数据,这里是链接sqlfiddle.com/#!2/5adaa,我花了很长时间,因为我有大约一万条记录和额外的列,我必须编辑和更新。
标签: mysql doctrine doctrine-query