树选择sqlite

时间:2015-10-19 12:24:12

标签: android sqlite recursion tree

我在android中使用sqlite,并且需要选择一个选择来获取他们孩子的所有父级,例如:

id || parent_id || child_id || name

1     1            1           jhon
2     1            2           helen
3     2            3           barack
4     1            4           manuel
5     3            5           gaga

结果应为:

jhon
helen
manuel
barack
gaga

所以,我需要一个reqursive sql,但谷歌搜索我发现CTE在sqlite上支持not,无论如何我甚至可以使用递归java方法返回所选名称的列表顺序父母asc

请注意,树深度可以超过2个级别!

1 个答案:

答案 0 :(得分:0)

我不确定如何解释你的桌子。每个节点都有一个ID,对;和一个(唯一的)parent_id(指向自己的根节点?)。什么是child_id?难道不能有多个孩子吗?

当处理任意深度的递归结构时,如果树不经常更改,并且查询需要快,请创建一个支持表(例如,“ancestral_closure”),详细说明所有父子关系的闭包:

ancestor_id, child_id

并确保每当基表更改时它都会更新(通过基表递归并为位于另一个下面的每个节点添加一行)。当您需要查找节点的所有父项和/或子项时,请加入ancestral_closure表。我不认为sqlite支持在插入/删除/更新触发器上执行的存储过程,因此必须手动触发更新。

SQL擅长简单关系,而不是任意图形。