mysql快速實作遞歸樹狀查詢
【前言】今天一個好朋友問我的這個問題,以前也沒有用到過,恰好有時間,就幫他研究了一下,純屬“現學現賣”,正好在過程中,自己也能學習一下!個人感覺,其實一點也不難,不過是“聞道有先後”,我們是“後”罷了。按照我的習慣,學完東西,總要總結一下嘛,也當做一個備忘錄了。
具體需求就不描述了,簡而言之,歸結為兩個:
1.如何通過子節點(cid)加載出所有的父節點(pid)?
2.如何通過父節點(pid)加載出所有的子節點(cid)?
廢話不多說,直接上簡易教程:
1.建立一個測試表
2.編寫測試資料
3.實際樹型結構
4.建立通過子節點(cid)加載出所有的父節點(pid)的存儲函數
5.測試(找出id=7的所有父節點)
6.建立通過子節點(cid)加載出所有的父節點(pid)的存儲函數
7.測試(找出id=1的所有子節點)
8.補充:以上一組簡單的教程,主要也是總結于網上的各種資料,其實我個人覺得,對于程式員來說“複制,粘貼”沒有什麼好不恥的,重點是在于:“複制,粘貼”别人的東西後,要學會分析與進一步的思考,并且能夠舉一反三,最好之後還能認真的總結一下。這樣,别人的東西,才變成了你的東西。并且,你可能比之前那個人做的更好;如此下去,才是一個良性循環!
下面我們就簡單分析一下這個存儲函數的結構:
之後,我又根據朋友的特殊需求,進行了修改,主要是我朋友想查出的并不是各種id,而是希望通過一個子節點的id,直接查出所有父級的名稱,便于展示。
最後進行測試,達到了朋友想要的預習效果:
至此,才是一個完整的學習過程,也是我常用的學習方式:
碰到難題
---> 心态放平,不要怕,暗示自己“一定能解決”
---> 各種管道擷取能解決問題的資源(google/百度,找項目中類似問題參考)
---> 看懂、學會别人的東西
---> 深度分析,研究其實質性原理(一系列連鎖知識的快速串燒)
---> 結合自身實際,進行優化,變成自己的東西;
---> 總結,寫出來(使知識更加系統化,回顧加深印象,備忘)