我的表格有以下架构:
id,parent_id,text
鉴于以下数据,我想返回一个xml层次结构:
数据:(1,null,'x'),(2,1,'y'),(3,1,'z'),(4,2,'a')
XML:
[row text =“x”]
[row text =“y”]
[row text =“a”/]
[/行]
[row text =“z”/]
[/ row]
补充:层次结构没有最大深度
答案 0 :(得分:1)
如果你有一个有限的深度,那就是这样的快速:
SELECT T.*, T2.*, T3.* /*, ...*/ FROM myTable T
INNER JOIN myTable T2 ON T2.parent_id=T.id
INNER JOIN myTable T3 ON T3.parent_id=T2.id
/* ... */
WHERE T.parent_id IS NULL
FOR XML AUTO
我不确定,但可以使用recursive queries设计类似的结果。当然,在应用程序级别上它更容易(也可能更有意义)。
答案 1 :(得分:-1)
这需要“传递性关闭”。您需要递归处理数据以查找给定父级下的所有子项。
粗略地算法看起来像这样。
for top in cursor( nodes where each parent==null ):
build_tree( top )
def build_tree( parent ):
emit opening tag
for child in cursor( nodes where parent == parent ):
build_tree( child )
emit closing tag
请注意,某些SQL解释器可能在递归时遇到问题 - 它们可能无法根据需要打开新的新游标。但是,每个游标必须是不同的,因为您将拥有与树有级别一样多的打开游标。