首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我认为这是一个复杂的MySQL查询

我认为这是一个复杂的MySQL查询
EN

Stack Overflow用户
提问于 2012-09-06 17:44:20
回答 3查看 103关注 0票数 1

我有一个名为categories的表和一个名为business_categories_coupling的表。在类别中,您有通常的idnameparent。在耦合表中,有business_idcategory_id。每个企业可以有多个类别,所以我将它们存储在该表中。看起来是这样的:

代码语言:javascript
复制
business_id    category_id
73             80
73             81
73             90
74             4
74             10

现在,我的查询只是选择所有类别,在每个循环中执行一个foreach和一个db查询,以查找该类别中有多少业务。显然这不是正确的方法。

是否有一种方法来执行SQL查询,基本上选择所有类别,获取它在耦合表中出现的次数,并向每个类别添加一个计数?

代码语言:javascript
复制
SELECT
    C.*
FROM
    CATEGORIES AS C
LEFT JOIN
    BUSINESS_CATEGORIES_COUPLING AS B
ON
    C.id = B.category_id;

有点像,但是在某个地方有个数字。我试过不同的设置,但是没有什么能像我想要的那样工作。有什么建议吗?

编辑1

由@phani提供的解决方案,但我添加了一个WHERE子句:

代码语言:javascript
复制
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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-06 17:50:27

是的,有。您可以使用Group by子句:

代码语言:javascript
复制
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

你的结果应该是:

代码语言:javascript
复制
category   count_of_category
80          2
81          5
90          1
.           .
.           .
.           .
票数 2
EN

Stack Overflow用户

发布于 2012-09-06 17:47:01

您还需要按C表的字段进行分组。

代码语言:javascript
复制
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中逐个选择所有列)。

票数 1
EN

Stack Overflow用户

发布于 2012-09-06 17:47:23

你要找的是一个从句组。

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12305589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档