Php 我认为这是一个复杂的MySQL查询
我有一个名为Php 我认为这是一个复杂的MySQL查询,php,mysql,Php,Mysql,我有一个名为categories的表和一个名为business\u categories\u coupling的表。在类别中,您有通常的id,名称,父项。在耦合表中,您有business\u id和category\u id。每个企业可以有多个类别,因此我将它们存储在该表中。有点像这样: business_id category_id 73 80 73 81 73 90 74 4 74
categories
的表和一个名为business\u categories\u coupling
的表。在类别中,您有通常的id
,名称
,父项
。在耦合表中,您有business\u id
和category\u 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
您还需要根据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中,您可以
GROUP BY
单个值C.id;在其他SQL方言中,您可以通过按“C.*”分组来表达“按C表的行分组”的概念;在其他一些SQL方言中,您需要指定查询的所有非聚合列,在这种情况下,您可以逐个指定从C中选择的所有列).您要查找的是GROUP BY子句
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;
是的,有。
您可以使用分组依据
子句:
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
. .
. .
. .
太棒了,太棒了。谢谢你,帕尼!唯一奇怪的是,如果一个类别在耦合表中没有任何关系,它会显示为1,而不是0。我添加了coupling.category_id不为NULL的地方。我会将完整的解决方案添加到我原来的帖子中,并接受你的!