mysql - 计算外键的数量

标签 mysql


我有三张 table 。

1.fi_category

+----+-----------------+-----------------+
| id | name            | slug            |
+----+-----------------+-----------------+

2.fi_subcategory

+----+-----------------+-----------------+-------------+
| id | name            | slug            | category_id |
+----+-----------------+-----------------+-------------+

3.fi_business_subcategory

+----+-------------+----------------+
| id | business_id | subcategory_id |
+----+-------------+----------------+

我基本上想做的是,

  1. 获取所有类别
  2. 获取属于类别的所有子类别。
  3. 计算特定子类别中存在的商家数量。

这就是我尝试做的。

SELECT 
    f.id,
    f.name,
    f.slug,
    f2.id,
    f2.name,
    f2.slug,
    COUNT(f3.business_id) as count
FROM
    fi_category f
LEFT JOIN 
    fi_subcategory f2 ON f.id = f2.category_id
LEFT JOIN 
    fi_business_subcategory f3 ON f2.id = f3.subcategory_id

但是上述查询仅获取 1 条记录。我如何获取我想要的东西?

最佳答案

我会添加一个GROUP BY子句:

SELECT 
    f.id,
    f.name,
    f.slug,
    f2.id,
    f2.name,
    f2.slug,
    COUNT(f3.business_id) as count
FROM fi_category f
LEFT JOIN fi_subcategory f2 
    ON f.id = f2.category_id
LEFT JOIN fi_business_subcategory f3 
    ON f2.id = f3.subcategory_id
GROUP BY f.id,
    f.name,
    f.slug,
    f2.id,
    f2.name,
    f2.slug

或者在子查询中获取您的count():

SELECT f.id,
    f.name,
    f.slug,
    f2.id,
    f2.name,
    f2.slug,
    f3.cnt
FROM fi_category f
LEFT JOIN fi_subcategory f2 
    ON f.id = f2.category_id
LEFT JOIN
(
    select count(business_id) cnt, subcategory_id 
    from fi_business_subcategory
    group by subcategory_id
) f3 
    ON f2.id = f3.subcategory_id

关于mysql - 计算外键的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12371304/

相关文章:

mysql - 修改查询以使其执行速度更快,但仍然得到相同的结果

mysql - 如何通过结果集选择 ID 或获得更好的数据模型?

php - 复合项目的相似度得分

mysql - 单个 MySQL 查询中的两个 LEFT JOIN

mysql - sql选择不包含某些项目的订单

php - 结果显示在 phpmyadmin 中,而不显示在浏览器中

php - codeigniter 中的查询给出错误

mysql - 使用左连接和连接表的另一个字段中的位置

php - 使用可选参数构建 SQL 语句

php - 在不知道列名 PHP 的情况下更新表值