我有一个User表,如下所示
UserID Name SponsorID (FK)
1 A null
2 B 1
3 C 1
4 D 3
SponsorID
指的是UserID
。现在我需要编写一个查询,它返回给定UserID
的后代的所有用户。
实施例
目前的实施是通过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);
}
}
答案 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?