Php Mysql上同一个表的计数子菜单

Php Mysql上同一个表的计数子菜单,php,mysql,sql,mysqli,count,Php,Mysql,Sql,Mysqli,Count,我有一个mysql表,如下所示,我试图从同一个表的父菜单中计算子菜单,但我很困惑。我还是mysql的初学者,怎么解决呢 menuId | menuName | menuType | menuParentId ------------------------------------------------- 1 | Settings | parent | NULL 2 | Set1 | child |

我有一个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               

感谢您的帮助

为每个菜单进行自左连接以计数子菜单,对于
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


如果你想在字符串中显示真假

哇,回答得好,兄弟,非常感谢。。。wassalamu Alaikum为什么不直接使用
COUNT(b.menuId)>0作为“打开”
。由于
COUNT()
从不返回
NULL
,因此结果总是相同的。@是的,您是对的,这将是一个速记检查