2011-05-16 45 views
0

我有如下表:分層數據加入父/子關係的同桌

Id ParentId Weight 
1 1   0 
2 1   10 
3 2   5 

ParentId引用同一個表的Id。我怎樣才能查詢這個表格,以便我自己加入它,累計第三列的累計重量?

例如,如果我想知道Id 2的累計重量,則結果將返回15(Id2 + Id3 = 15),因爲項目3的父項爲2。如果我想知道項目的累計重量3,它將返回5,因爲沒有記錄具有項目3的父項ID。

本質上,如果我正在查詢的記錄有一個孩子,我想添加數據的子項序列並返回一個結果。

這是可能的一舉做到數據庫,或者我將不得不遍歷整個記錄集來查找匹配?

回答

1

看一下this article。如果你的表沒有經常更新,你可以修改它們的一些GenericTree過程,它爲所有行生成所有路徑(並在每次向表中插入記錄或更新ParentId列時調用它),將這些數據存儲到新表中,然後您可以使用簡單的查詢執行所需的所有任務。就個人而言,我最終下表結構:

CREATE TABLE `tree_for_my_table` (
`rootID` INT(11) NOT NULL, // root node id 
`parentID` INT(11) NOT NULL, // current parent id 
`childID` INT(11) NOT NULL, // child id (direct child of the parent) 
`level` INT(11) NOT NULL, // how far child is from root 
PRIMARY KEY (`rootID`, `parentID`, `childID`), 
UNIQUE INDEX `childID` (`childID`, `level`) 
) 

填充數據,該表並不需要太長時間,即使是相當大my_table

0

最後我看了一下,mysql沒有內置的分層查詢方式,但是你總是可以使用諸如鄰接列表之類的技術,在Managing Hierarchical Data in MySQL中討論過(在其他技術中),它編碼層次結構另一個表,並讓你加入這個表來檢索層次結構中的子樹。