Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我认为这是一个复杂的MySQL查询_Php_Mysql - Fatal编程技术网

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的地方。我会将完整的解决方案添加到我原来的帖子中,并接受你的!