2014-11-22 86 views
0

特定用户获取下线我有一个用户表,它看起来像下面从休眠或SQL

UserID Name SponsorID (FK) 
1  A  null 
2  B  1 
3  C  1 
4  D  3 

SponsorIDUserID。现在我需要写一个查询,返回给定UserID的后代的所有用户。

  1. 对于用户ID 1的查询将返回所有4个用户
  2. 对于用户ID 3的查询应该由looping每个直接返回1个用户

当前实现越来越用户列表下线,我正在寻找更好的解决方案,如果可能的话。

UPDATE

当前代码

public void findDownlineSponsorByUserBO(UserBO rootBO) throws Exception { 
    List<UserBO> downlines = businessOperationService.findUserBySponsorId(rootBO.getId(), "createdDate", false); 
    memberList.addAll(downlines); 
    for (UserBO memberBO : downlines) { 
     findDownlineSponsorByUserBO(memberBO); 
    } 

} 
+0

添加您当前的实现代码。 – 2014-11-22 12:37:00

+0

用当前的代码更新了我的问题。 – abiieez 2014-11-22 13:00:38

回答

1

你将要在这里使用迭代或递归解决方案,除非(也许)你的局限性,并可以赞助的一个水平在一次连接中将UserID与SponsorID相关联。您可以将表加载到内存中的树结构中,然后查询该结构。加载它将是O(nlogn),但是然后遍历它将是O(logn)。

这其他的SO问题可能给你一些有用的想法:Is it possible to query a tree structure table in MySQL in a single query, to any depth?