我有一个表,其中父子关系船存储为:
ChildID名称ParentID
1 A1 Null
2 A2 1
3 B1 Null
4 A3 2
5 A4 1
我正在讨论Objective C,我需要以Manner方式生成文本文件:
名称= A1>
名称= A2>
名称= A3 />
名称= A2 />
名称= A4 />
名称= B1 />
我正在使用approch,首先捕获Last Element(Id = 5),然后检查所有其他节点以获取其父节点。 n复杂性变为n * n-1,还有其他更好的方法,因为当我们在数据库中使用数据时,这种方法并不成功。
数据库结构很灵活,我们可以改变它,如果有更好的东西......
寻求您的帮助和支持。
答案 0 :(得分:0)
从输出结构中,我假设您的数据代表一棵树。因此,您有一个简单的“获取节点的所有子节点”请求为SELECT childId, name FROM tree WHERE parentId = ?
,这使您可以执行标准树遍历。伪代码:
def displayNode(node)
children = selectChildren(node.id)
if (empty(children))
print '<'+node.name+'/>'
else
print '<'+node.name+'>'
for (child in children)
displayNode(child)
print '</'+node.name+'>'
优化,如果每个节点运行一个查询太多(可能就是这种情况)是运行单个查询来获取所有数据并将其置于优化的数据结构中:
for (node in selectAllNodes())
nodes[node.parent].append(node);
def selectChildren(id)
return nodes[id]