2009-12-22 55 views
0

我有其中父子關係船被存儲在表爲:
childID的名稱PARENTID
1 A1空
2 A2 1
3 B1空
4 A3 2
5 A4 1
我米沃金上目標C和我需要生成在方式文本文件:
名稱= A1> 名稱= A2> 名稱= A3 /> 名稱= A2 />
名稱= A4 />
名稱= B1 />邏輯來實現在有效的方式父子關係

我使用的是計算策略,我趕上了最後一個元素(ID = 5),然後再檢查所有其他節點來獲得它的父節點。 n複雜性成爲n * n-1,還有其他更好的方法,因爲當我們在數據庫中存儲數據時,這種方法不是成功的。

數據庫結構靈活,我們可以改變的是,如果有更好的東西...

尋找您的幫助和支持。

回答

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]