java工程積累 樹形結構的操作

2021-06-27 19:44:21 字數 1739 閱讀 9553

最近一直被樹形結構整的很頭大,又是遞迴,又是迴圈,但是,好在我們在經歷了千辛萬苦後,終於弄出來了,其實就是組織機構的常規操作,有些是我們過度設計,有些是我們想錯了,而對數的邏輯讀取,我們就屬於想錯了的型別,今天拿出來和大家分享,主要是樹形結構在資料庫的讀取問題!

在最開始,我們對樹的查詢,肯定是從最簡單的select開始,我們現在回顧一下:

表名:tb_tree

字段:id(主鍵),title(標題),parentid(父節點id)

1、查詢樹中的所有頂級父節點(輩份最長的人)。 假設這個樹是個目錄結構,那麼第乙個操作總是找出所有的頂級節點,再根據該節點找到其下屬節點。

select * from tb_tree m where m.parent is null;

2、查詢乙個節點的直屬子節點(所有兒子)。 如果查詢的是直屬子類節點,也是不用用到樹型查詢的。

select * from tb_tree m where m.parent=1;

我們經過不斷的探索,發現oracle樹查詢的最重要的就是select…start with…connect by…prior語法了。依託於該語法,我們可以將乙個表形結構以樹的順序列出來。

1、start with id= 是定義起始節點(種子),可以是id也可以是root_id,定義為root_id查詢該節點下所有的樹結構,定義為id(子節點)則查詢指定的樹

2、connect by prior :prior的含義為先前,前一條記錄。prior id=root_id 也就是前一條記錄的id等於當前記錄的root_id(父id)

1、查詢乙個節點的所有直屬子節點(所有後代)。

select * from tb_menu m start with m.id=1 connect by m.parent=prior m.id;
這個查詢的是id為1的節點下的所有直屬子類節點,包括子輩的和孫子輩的所有直屬節點。

2、查詢乙個節點的直屬父節點(父親)。 如果查詢的是節點的直屬父節點,也是不用用到樹型查詢的。

--c-->child, p->parent

select c.id, c.title, p.id parent_id, p.title parent_title

from tb_menu c, tb_menu p

where c.parent=p.id and c.id=6

3、查詢乙個節點的所有直屬父節點(祖宗)。

select * from tb_menu m start with m.id=38 connect by prior m.parent=m.id;

4、level欄位為oracle特有的層級字段,可以通過level欄位查詢指定的層級

select root_id,id,name,level from t2 where level=1

start with root_id = 0

connect by prior id = root_id;

通過這幾天的觀察,我們發現,集體的智慧型永遠是最強大的,每個人貢獻一點點,我們就能將問題的解決方案在設計之初就公升級到乙個客觀的程度,包括這次的樹形結構的研究,相信你的隊友不論他在你心理到底是什麼狀態,他既然被招進公司,肯定有他的閃光點打動了人力部門,且還有一句話,高手在民間,這句話,已經多次被驗證了!

java工程積累 tcp ip連線

環境 程式伺服器 win server 2008 tomcat 資料伺服器 unix oracle 10 g 程式架構 經典ssh 在進行業務操作時,比較卡頓,而在進行報銷列印時,有時會出現資料庫連線失敗的錯誤 後台報錯,不能開啟這個連線 用plsql連線時,我們發現,使用公司分配的資料庫伺服器時 ...

js樹形結構操作

按照pid分組,分組可以大大減少遞迴次數。array分組的最好方式是用物件接收array的項,該物件的key值就是分組憑證 按照pid和id的匹配 遞迴 已分組的資料。array轉樹形結構的演算法 params list 代轉化陣列 params parentid 起始節點 預設為 0 params...

java 遞迴查詢樹形結構

什麼叫做遞迴呢?程式設計師呼叫自身的程式設計技巧叫做遞迴。例如區域的省市縣聯動,中,通過查詢省的id,查處這個省下邊的所有市以及市下邊的縣等操作,就可以通過遞迴演算法來查詢 我使用的框架是ssm,主要是在service層做判斷 private listgetregionlist string id ...