亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

是否可以通過單個查詢在MySQL中查詢樹結構表到任何深度?

是否可以通過單個查詢在MySQL中查詢樹結構表到任何深度?

開滿天機 2019-10-28 10:25:50
我認為答案是否定的,但是我很喜歡它,任何人都可以深入了解如何在SQL(MySQL)中將樹結構爬網到任何深度,而只需一個查詢更具體地說,給定一個樹形結構的表(id,數據,數據,parent_id)和表中的一行,是否有可能獲得所有后代(子代/孫代/等等),或者所有祖先(父代/祖父母) / etc),而不用單個查詢知道它會走多遠?還是使用某種遞歸需求,在這里我不斷進行更深入的查詢,直到沒有新結果為止?具體來說,我使用的是Ruby和Rails,但我猜這不太相關。
查看完整描述

3 回答

?
紫衣仙女

TA貢獻1839條經驗 獲得超15個贊

我之前遇到過這個問題,并且有一個古怪的想法。您可以在每個記錄中存儲一個字段,該字段是直接祖先的ID一直串聯到根的串聯字符串。


想象一下,您有這樣的記錄(縮進意味著層次結構,數字是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的后代,只需執行此操作


SELECT FROM table WHERE ancestors LIKE "%6,2,1"

使祖先列保持最新狀態可能比給您帶來更多麻煩,但這對任何數據庫都是可行的解決方案。


查看完整回答
反對 回復 2019-10-28
?
慕標5832272

TA貢獻1966條經驗 獲得超4個贊

當您要問的主要問題是“我所有的孩子是什么”和“父母全部是什么”時,Daniel Beardsley的答案根本不是一個糟糕的解決方案。


作為對Alex Weinstein的回應,與Celko技術相比,此方法實際上導致對父級運動上的節點的更新更少。在Celko的技術中,如果最左邊的2級節點移動到最右邊的1級節點之下,則樹中幾乎每個節點都需要更新,而不僅僅是節點的子節點。


但是我要說的是,丹尼爾可能會以錯誤的方式將路徑存儲回根。


我會存儲它們,以便查詢將


SELECT FROM table WHERE ancestors LIKE "1,2,6%"

這意味著mysql可以使用“祖先”列上的索引,而前導%則無法做到這一點。


查看完整回答
反對 回復 2019-10-28
  • 3 回答
  • 0 關注
  • 1127 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號