【问题标题】:Count Child Menu From Same Table On Mysql从 Mysql 上的同一表计算子菜单
【发布时间】:2018-06-19 15:08:42
【问题描述】:

我有下面这样的 mysql 表,我试图从同一张表中的父菜单中计算孩子,但我很困惑。我还是mysql初学者,怎么解决?

menuId     | menuName  | menuType  | menuParentId  
-------------------------------------------------
1          | Settings  | parent    | NULL          
2          | Set1      | child     | 1             
3          | Set2      | child     | 1             
4          | Category  | parent    | NULL         
5          | Cat1      | child     | 4             
6          | Cat2      | child     | 4             
7          | Dashboard | parent    | NULL          

我的预期结果是这样的:

menuId     | menuName  | countChild | open 
--------------------------------------------
1          | Settings  | 2          | true           
2          | Set1      | 0          | false                            
3          | Set2      | 0          | false                            
4          | Category  | 2          | true                       
5          | Cat1      | 0          | false                            
6          | Cat2      | 0          | false                           
7          | Dashboard | 0          | false               

感谢帮助

【问题讨论】:

    标签: php mysql sql mysqli count


    【解决方案1】:

    做一个自左连接来计算每个菜单的子项,对于 open 使用 case 语句覆盖聚合函数的结果 COUNT

    SELECT a.menuId,
           a.menuName,
           COUNT(b.menuId) countChild,
           CASE WHEN COUNT(b.menuId) > 0 THEN TRUE ELSE FALSE END `open`
    FROM table1 a
    LEFT JOIN table1 b ON a.menuId = b.menuParentId
    GROUP BY a.menuId, a.menuName
    

    Demo

    如果您想将真假显示为字符串,请将它们放入qoutes

    【讨论】:

    • 哇,很好的回答兄弟,非常感谢... wassalamu Alaikum
    • 你为什么不直接使用COUNT(b.menuId) > 0 AS `open`。由于COUNT() 永远不会返回NULL,因此结果将始终相同。
    • @PaulSpiegel 是的,你是对的,这将是一个速记检查
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多