My SQL 中怎么递归查询所有的父节点
怎么根据某个menuId一直往上查,查到所有的父节点,我用的是mysql数据库。其SQL语句怎么写?
分享到:
------解决方案--------------------
有sql和存储过程sql,存储过程
------解决方案--------------------
只用一句SQL是办不到的,有个办法是在程序中写个递归的方法,方法参数是你想要查询的节点和一个List,然后方法里根据此节点去查父节点,当查出来的父节点不是“0”就把父节点放入参数里的List,并且递归调用自己,直到父节点为“0”,最后,参数的List里的值就是你要的结果了
------解决方案--------------------
//获取表中所有id
protectedListgetIdList(Stringsql,Object...params){
returnxxx;
}
//获取该menu下的所有子节点
privateListgetMenuChildrenIds(longmenuId){
Stringsql="selectmenu_idfromtest_tbwherep_id=?";
returngetIdList(sql,menuId);
}
publicvoidgetAllChildren(longmenuId,ListmenuIdList){
ListchildrenIds=getMenuChildrenIds(menuId);
for(longmenu_Id:childrenIds){
menuIdList.add(menu_Id);
//计数
intcount=geliDao.count("selectcount(1)fromtest_tbwherep_id=?",menu_Id,status);
if(count>0){
getAllChildren(menu_Id,menuIdList);
}
}
}
//
publicList
returnorm.list(Menu.class,getMenuChildrenIds(menuId).toArray());
}
//执行,全找出来menuIds,放到list里面
ListmenuIds=newArrayList();
menuIds.add(menu.getMenuId());
getAllChildren(menu.getMenuId(),menuIds);
大概就是这么个意思了,我也胡乱贴上去的,希望对你有帮助
------解决方案--------------------
mysql不支持这个,楼主可以考虑一下自己写个放在类中
循环遍历取父ID,拼成string或者json
再或者只有更改表结构,
如Aid:01
Bid:0101
Cid:010101