从Hibernate或SQL中的特定用户获取下划线

时间:2014-11-22 12:35:30

标签: sql hibernate

我有一个User表,如下所示

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

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

实施例

  1. 对于UserID 1,查询返回所有4个用户
  2. 对于UserID 3,查询应返回1个用户
  3. 目前的实施是通过looping每个直接下线获取用户列表,如果可能的话,我正在寻找更好的解决方案。

    更新

    当前代码

    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);
        }
    
    }
    

1 个答案:

答案 0 :(得分:1)

您将不得不在此处使用迭代或递归解决方案,除非(可能)您仅限于一个级别的赞助商,并且可以在一个联接中将UserID与SponsorID相关联。您可以将表加载到内存中的树结构中,然后查询它。加载它将是O(nlogn),但随后遍历它将是O(logn)。

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