怎么通过一个ID树形结构递归找出所有ID,并把这些ID写入一个list

andrew_zx 2008-07-08 03:57:14
数据表treeEm结构
name id parentid

现在只是知道一个ID,也不知道这个ID下面有几层
怎么找出所有的ID,把他们写入一个List
...全文
856 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
andrew_zx 2008-07-09
  • 打赏
  • 举报
回复
有没有朋友能详细点啊 谢谢了 急啊
andrew_zx 2008-07-09
  • 打赏
  • 举报
回复
大哥 伪代码我也会写 但是老是出错 有没有详细点得思路啊
colin09 2008-07-09
  • 打赏
  • 举报
回复
List 获得子id(父id){
...
}

void 获得子id(父id,List result){
List temp=获得子id(父id);
result.addAll(temp);
遍历temp中的子{
获得子id(子id,List result){
}
}


调到方法:
List allChlid=new ArrayList();
获得子id(父id,List allChlid);
allChlid中就是递归得到的所有子id
colin09 2008-07-09
  • 打赏
  • 举报
回复
List 获得子id(父id){
...
}

void 获得子id(父id,List result){
List temp=获得子id(父id);
result.addAll(temp);
遍历temp中的子{
获得子id(子id,List result){
}
}


调到方法:
List allChlid=new ArrayList();
获得子id(父id,List allChlid);
allChlid中就是递归得到的所有子id
andrew_zx 2008-07-09
  • 打赏
  • 举报
回复
我需要做这件事是再DAO这层
public List findChildId (String parentId) {
String queryStr = "select vg.id from treeEm as vg where vg.parent=? = '"+parentId'";
list.add(getHibernateTemplate().find(queryStr));
.....
return list;
}

我就是想再这里输入一个parentId的字符串,输出一个这个节点以下Id得list总计,老是这段递归写得有问题,有人能指导一下吗 谢谢了
maybe723 2008-07-09
  • 打赏
  • 举报
回复
slqserver2005:

with showtree(id,parentid)
as
(
select top 1 id,parentid from form where id=1
union all
select t.id,t.parentid from form as t join showtree on t.parentid=showtree.id
)
SELECT id,parentid FROM showtree order by parentid

andrew_zx 2008-07-09
  • 打赏
  • 举报
回复
谢谢 preferme 太合适了
冰思雨 2008-07-09
  • 打赏
  • 举报
回复
我现在还不会Spring.所以,楼主的框架我也不会用,总觉得getHibernateTemplate().find(queryStr) 这个调用返回的应该是List对象.所以,那个list.add(getHibernateTemplate().find(queryStr));是不是应该是list.addAll()方法?

下面是一个效率低下的办法,楼主看懂意思,应该就可以出现结果.如果要提高效率,可能要复杂一些了.可以想办法一条SQL搞出结果这样可能要好一些.

public List findChildId (String parentId) {
List list = new LinkedList();
findChildId0(list,parentId);
return list;
}

private void findChildId0 (List list,String parentId) {
String queryStr = "select vg.id from treeEm as vg where vg.parent=? = '"+parentId'";
List result = getHibernateTemplate().find(queryStr);
if(result!=null && result.size()>0){
list.addAll(result);
for(Iterator itr=result.iterator();itr.hasNext();){
String pId = (String)itr.next();
findChildId0(list,pId);
}
}
}
墨水鱼 2008-07-08
  • 打赏
  • 举报
回复
写一个public Bean getChild(int parentId);给一个父ID,得到子数据条目的一个JavaBean,如果没有子数据条目则返回null。
List<Bean> list = new ArrayList<Bean>();
int id = ##;
Bean b = null;
while((b=getChild(id))!=null){
id=b.getId;
list.add(b);
}
return b;
lnfszl 2008-07-08
  • 打赏
  • 举报
回复

如果你是oracle数据库,那么可以

select id from treeEm
start with id='your business id' --在这写入你想要查找的初始节点
connect by prior id = parentid

这语句可以返回 你输入的节点下的所有节点,然后把结果些入list即可
andrew_zx 2008-07-08
  • 打赏
  • 举报
回复
我写了两次都有问题 能否告知一下 谢谢了
rascalboy520 2008-07-08
  • 打赏
  • 举报
回复
对树形结构遍历啊,将得到的数据组成字符串,最后压到list里就可以了,

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧