我有一个名为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提供的解决方案,但我添加了一个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发布于 2012-09-06 17:50:27
是的,有。您可以使用Group by子句:
select a.id as category, count(a.id) as count_of_category
from categories a
left join business_categories_coupling b on a.id=b.category_id
group by a.id你的结果应该是:
category count_of_category
80 2
81 5
90 1
. .
. .
. .发布于 2012-09-06 17:47:01
您还需要按C表的字段进行分组。
SELECT C.id, C.field1, C.field2, COUNT(*)
FROM CATEGORIES AS C
LEFT JOIN BUSINESS_CATEGORIES_COUPLING AS B
ON (C.id = B.category_id)
GROUP BY C.id, C.field1, ...(在MySQL中,您可以使用单一值C.id;在其他C.id方言中,您可以通过“C *”分组来表达“按C表行分组”的概念;在另一些情况下,您需要指定查询中的所有非聚合列,在这种情况下,您从C中逐个选择所有列)。
发布于 2012-09-06 17:47:23
你要找的是一个从句组。
SELECT
C.*, count(C.id)
FROM
CATEGORIES AS C
LEFT JOIN
BUSINESS_CATEGORIES_COUPLING AS B
ON
C.id = B.category_id
GROUP BY B.category_id;https://stackoverflow.com/questions/12305589
复制相似问题