天天看點

【JAVA秒會技術之搞定資料庫遞歸樹】Mysql快速實作遞歸樹狀查詢

mysql快速實作遞歸樹狀查詢

【前言】今天一個好朋友問我的這個問題,以前也沒有用到過,恰好有時間,就幫他研究了一下,純屬“現學現賣”,正好在過程中,自己也能學習一下!個人感覺,其實一點也不難,不過是“聞道有先後”,我們是“後”罷了。按照我的習慣,學完東西,總要總結一下嘛,也當做一個備忘錄了。

【JAVA秒會技術之搞定資料庫遞歸樹】Mysql快速實作遞歸樹狀查詢

具體需求就不描述了,簡而言之,歸結為兩個:

1.如何通過子節點(cid)加載出所有的父節點(pid)?

2.如何通過父節點(pid)加載出所有的子節點(cid)?

廢話不多說,直接上簡易教程:

1.建立一個測試表

2.編寫測試資料

3.實際樹型結構

4.建立通過子節點(cid)加載出所有的父節點(pid)的存儲函數

5.測試(找出id=7的所有父節點) 

6.建立通過子節點(cid)加載出所有的父節點(pid)的存儲函數 

7.測試(找出id=1的所有子節點)

8.補充:以上一組簡單的教程,主要也是總結于網上的各種資料,其實我個人覺得,對于程式員來說“複制,粘貼”沒有什麼好不恥的,重點是在于:“複制,粘貼”别人的東西後,要學會分析與進一步的思考,并且能夠舉一反三,最好之後還能認真的總結一下。這樣,别人的東西,才變成了你的東西。并且,你可能比之前那個人做的更好;如此下去,才是一個良性循環!

下面我們就簡單分析一下這個存儲函數的結構:

【JAVA秒會技術之搞定資料庫遞歸樹】Mysql快速實作遞歸樹狀查詢

之後,我又根據朋友的特殊需求,進行了修改,主要是我朋友想查出的并不是各種id,而是希望通過一個子節點的id,直接查出所有父級的名稱,便于展示。

最後進行測試,達到了朋友想要的預習效果:

【JAVA秒會技術之搞定資料庫遞歸樹】Mysql快速實作遞歸樹狀查詢

至此,才是一個完整的學習過程,也是我常用的學習方式:

碰到難題

---> 心态放平,不要怕,暗示自己“一定能解決”

---> 各種管道擷取能解決問題的資源(google/百度,找項目中類似問題參考)

---> 看懂、學會别人的東西

---> 深度分析,研究其實質性原理(一系列連鎖知識的快速串燒)

---> 結合自身實際,進行優化,變成自己的東西;

---> 總結,寫出來(使知識更加系統化,回顧加深印象,備忘)