Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.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
Mysql 从四个表中选择count_Mysql_Sql_Select_Count_Group By - Fatal编程技术网

Mysql 从四个表中选择count

Mysql 从四个表中选择count,mysql,sql,select,count,group-by,Mysql,Sql,Select,Count,Group By,我有四张桌子 公司(字段:id、名称) 城市(字段:id、名称) 类别(字段:id、名称) 城市\类别\公司(字段:公司\ id、城市\ id、类别\ id) 我需要在城市页面上统计每个类别中的公司数量 现在,我在一个丑陋的周期里做这件事 $q = mysqli_query($db, "SELECT * FROM `categories`"); while ($r = mysqli_fetch_assoc($q)) { $r2 = mysqli_fetch_assoc(

我有四张桌子

  • 公司(字段:id、名称)
  • 城市(字段:id、名称)
  • 类别(字段:id、名称)
  • 城市\类别\公司(字段:公司\ id、城市\ id、类别\ id)
  • 我需要在城市页面上统计每个类别中的公司数量

    现在,我在一个丑陋的周期里做这件事

    $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个或更多)上就会有很多对数据库的查询。请帮助我优化查询

    尝试以下操作:

    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
    

    您可以使用“按类别\u id分组”
    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