3 回答

TA貢獻1839條經(jīng)驗 獲得超15個贊
我之前遇到過這個問題,并且有一個古怪的想法。您可以在每個記錄中存儲一個字段,該字段是直接祖先的ID一直串聯(lián)到根的串聯(lián)字符串。
想象一下,您有這樣的記錄(縮進意味著層次結(jié)構(gòu),數(shù)字是id,祖先。
1,“ 1”
2,“ 2,1”
5,“ 5,2,1”
6,“ 6,2,1”
7,“ 7、6、2、1”
11,“ 11,6,2,1”
3,“ 3,1”
8,“ 8、3、1”
9,“ 9,3,1”
10,“ 10,3,1”
然后選擇id:6的后代,只需執(zhí)行此操作
SELECT FROM table WHERE ancestors LIKE "%6,2,1"
使祖先列保持最新狀態(tài)可能比給您帶來更多麻煩,但這對任何數(shù)據(jù)庫都是可行的解決方案。

TA貢獻1966條經(jīng)驗 獲得超4個贊
當您要問的主要問題是“我所有的孩子是什么”和“父母全部是什么”時,Daniel Beardsley的答案根本不是一個糟糕的解決方案。
作為對Alex Weinstein的回應(yīng),與Celko技術(shù)相比,此方法實際上導致對父級運動上的節(jié)點的更新更少。在Celko的技術(shù)中,如果最左邊的2級節(jié)點移動到最右邊的1級節(jié)點之下,則樹中幾乎每個節(jié)點都需要更新,而不僅僅是節(jié)點的子節(jié)點。
但是我要說的是,丹尼爾可能會以錯誤的方式將路徑存儲回根。
我會存儲它們,以便查詢將
SELECT FROM table WHERE ancestors LIKE "1,2,6%"
這意味著mysql可以使用“祖先”列上的索引,而前導%則無法做到這一點。
添加回答
舉報