mysql - WHERE in sub 子选择 MySQL

标签 mysql subquery where-clause

表格“计划”

id   name
1     abc
2     def
3     ghi

表“时间表”

id     fk_store     fk_plan
1         4            1
2         4            1
3         4            1
4         6            1
5         6            1
6         5            3
7         7            3
8         7            3
9         12           1

这是我的查询:

SELECT plan.id as id, name, 
(SELECT GROUP_CONCAT(cnt) cnt FROM (SELECT COUNT(*) cnt 
FROM schedule WHERE fk_plan = plan.id GROUP BY fk_store) q) as schedule_count  
FROM plan LEFT JOIN schedule ON plan.id = schedule.fk_plan GROUP BY plan.id

我期待这个结果(例如在数组中):

 [0] = array(
    ['id'] = 1,
    ['name'] = 'abc',
    ['schedule_count'] = '3, 2, 1'
 ),

 [1] = array(
    ['id'] = 2,
    ['name'] = 'def',     
    ['schedule_count'] = ''
),

 [2] = array(
    ['id'] = 3,
    ['name'] = 'ghi',     
    ['schedule_count'] = '2,1'
),

不幸的是,我收到一个错误,WHERE 子句中的列 plan.id 未定义。当我不使用 WHERE 时,每个数组中的结果“schedule_count”为“3,2,2,1,1”。我发现了很多类似的解决方案,但我无法修复它。

我希望我的问题很清楚。预先感谢您。

最佳答案

试试这个

    SELECT  plan.id, name ,  GROUP_CONCAT(cnt)  AS schedule_count
    FROM plan left join (select fk_plan, count(fk_store) as cnt from schedule 
                         GROUP BY fk_store)t
              ON t.fk_plan  = plan.id                                 
    GROUP BY plan.id  

DEMO IN FIDDLE

  • 如果您要显示 0 而不是 (null),则用此替换上面的 GROUP_CONCAT

    GROUP_CONCAT(if(cnt is null , 0 , cnt))
    

关于mysql - WHERE in sub 子选择 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17469374/

相关文章:

php - 从特定帖子中获取名称和值

php - 获取 MySql 行的一部分?

mysql - 为性别使用新表或将其添加为人员表中的字段

关于评论投票的mysql子查询问题

sql - 多个 SQL Select 具有不同的位置到一个 Select 中

php - WordPress 函数错误

grails - 使用 detachedCriteria 作为 in 子句的子查询

mysql - 子查询中的 GROUP_CONCAT 仅返回一行

带通配符的 MySql Where 子句

mysql - MySQL WHERE 中一个字段的两个条件