从四个表中选择计数

时间:2013-12-07 07:16:51

标签: mysql sql select count group-by

我有四张桌子

  1. 公司(字段:id,name)
  2. cities(fields:id,name)
  3. 类别(字段:id,名称)
  4. city_category_company(字段:company_id,city_id,category_id)
  5. 我需要计算城市页面上每个类别的公司数量。

    现在,我是如此丑陋的循环

    $q = mysqli_query($db, "SELECT * FROM `categories`");
    while ($r = mysqli_fetch_assoc($q)) {
        $r2 = mysqli_fetch_assoc(
            mysqli_query($db, "SELECT COUNT(`company_id`) AS `num` FROM `city_category_company` WHERE `city_id` = '{$city['id']}' AND `category_id` = '{$r['id']}'")
        );
    }
    

    但是如果我有很多类别,那么在一个页面(50或更多)上对数据库的查询就会变得非常多。请帮我优化查询

2 个答案:

答案 0 :(得分:0)

试试这个:

SELECT c.id, c.name, COUNT(ccc.company_id) AS num
FROM city_category_company ccc
INNER JOIN categories c ON ccc.category_id = cc.id
WHERE ccc.city_id={city_id}
GROUP BY c.id

答案 1 :(得分:0)

SELECT COUNT(co.id) AS company_count, cc.category_id, ca.name AS category_name 
FROM companies co 
INNER JOIN city_category_company cc ON co.id=cc.company_id 
INNER JOIN categories ca ON ca.id=cc.category_id 
GROUP BY cc.category_id, ca.name