當(dāng)然這種結(jié)構(gòu)就不要追求什么效率了。如果要效率高的,只能改表結(jié)構(gòu)。
創(chuàng)新互聯(lián)建站堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:做網(wǎng)站、成都網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的豐都網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
1:select p2.id from table p1 ,table p2 where p1.id=p2.pid and p1.id=0
2:假設(shè)表名是tree
SQL codeselect distinct a.id from tree as a inner join tree as b on (a.pid = b.pid) where b.pid =0;
select distinct a.id from tree as a inner join tree as b on (a.pid = b.pid) where b.pid =2;
3.通過程序或數(shù)據(jù)庫的store procedure來實現(xiàn)了。 在mySQL中無法以一句SQL實現(xiàn)。
表結(jié)構(gòu)
這種情況可以通過左連接實現(xiàn)
可以看到左連接是以左表為基準(zhǔn),通過關(guān)聯(lián)關(guān)系id = pid去找到對應(yīng)的上級組織記錄,所以空的id找不到對應(yīng)的記錄,返回空
有時候我們需要獲取某個組織的完整路徑 如
部門C/部門C_2/部門C_2_1/部門C_2_1_1
編寫存儲過程,生成一個臨時表tmpLst,按照層級把每一條記錄插入到臨時表,然后每次從臨時表查當(dāng)前層級的組織,循環(huán)去查組織表的上級組織,直到結(jié)果ROW_COUNT = 0為止,代表當(dāng)前層級下的所有組織已經(jīng)是最后一級
查詢到的結(jié)果,大家可以自行優(yōu)化一下顯示方式和查詢的字段
當(dāng)然還有另一種方式,從設(shè)計上解決
如新加一個唯一約束,把組織的約束定義為 ORG_001_ORG_001_002_ORG_001_003 這樣的形式
當(dāng)需要查詢ORG_001所有的下級時,只需要查詢約束 like ORG_001% 即可
當(dāng)需要查詢ORG_001_002所有上級時,只需要查詢約束 like %ORG_001_002
不過問題在于如果組織的存在架構(gòu)調(diào)整,如,ORG_001_002調(diào)整到了 ORG_002下,因為樹型結(jié)構(gòu)變化了,直接用like無法查詢到正確數(shù)據(jù),這個時候要考慮是否允許調(diào)整或者調(diào)整后修改對應(yīng)的唯一約束
一般比較普遍的就是四種方法:(具體見 SQL Anti-patterns這本書)
Adjacency List:每一條記錄存parent_id
Path Enumerations:每一條記錄存整個tree path經(jīng)過的node枚舉
Nested Sets:每一條記錄存 nleft 和 nright
Closure Table:維護一個表,所有的tree path作為記錄進行保存。
當(dāng)前文章:mysql樹型結(jié)構(gòu)怎么查 mysql存儲樹形結(jié)構(gòu)的數(shù)據(jù)
文章源于:http://www.chinadenli.net/article40/dddcpeo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、網(wǎng)站營銷、網(wǎng)站建設(shè)、手機網(wǎng)站建設(shè)、用戶體驗、網(wǎng)站設(shè)計公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)