在开发过程中,经常遇到多级数据,譬如部门等,如果想查一个节点下所有子节点,有两种办法可以实现。第一是sql,第二是通过程序代码进行递归。
第一种、通过sql实现。
oracle可以直接通过sql “start with ...connect by prior..”实现查出节点下的所有节点。
例如:
select t.group_id from MOD_DATA_GROUP t start with t.group_id ='123' connect by prior t.group_id = t.parent_id.
执行的结果是123节点下的所有子节点。
但是mysql却不支持 start with . 如果想使用sql实现则需使用存储过程来实现。
第二种、通过程序递归实现。
适用于并发量不大,性能要求不是太苛刻的场合,毕竟可能一次查询要操作N次数据库。
第一种、通过sql实现。
oracle可以直接通过sql “start with ...connect by prior..”实现查出节点下的所有节点。
例如:
select t.group_id from MOD_DATA_GROUP t start with t.group_id ='123' connect by prior t.group_id = t.parent_id.
执行的结果是123节点下的所有子节点。
但是mysql却不支持 start with . 如果想使用sql实现则需使用存储过程来实现。
第二种、通过程序递归实现。
public void getAllDeptListByParentId(Integer parentid,List<Dept> list){
List<Dept> childList=getDeptListByParentId(parentid);
if(childList.size()==0)return;
for(Dept dept:childList){
if(dept.getLeaf()==0){
list.add(dept));
getAllDeptListByParentId(dept.getId(),list);
}else{
list.add(dept);
}
}
}
适用于并发量不大,性能要求不是太苛刻的场合,毕竟可能一次查询要操作N次数据库。
本文介绍两种查询多级数据的方法:一是使用SQL语句,在Oracle中可通过startwith...connectbyprior..实现;二是利用程序代码递归查询。递归方法适用于并发量较小、性能要求不高的场景。
4361

被折叠的 条评论
为什么被折叠?



