Исходя из вашей структуры вывода, я предполагаю, что ваши данные представляют собой дерево. Поэтому у вас есть простой запрос «получить все дочерние элементы узла» как 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]