一種Mysql數(shù)據(jù)庫(kù)下樹(shù)形數(shù)據(jù)結(jié)構(gòu)的檢索方法
【專利摘要】一種Mysql數(shù)據(jù)庫(kù)下樹(shù)形數(shù)據(jù)結(jié)構(gòu)的檢索方法,包括:在標(biāo)準(zhǔn)的樹(shù)形數(shù)據(jù)結(jié)構(gòu)表的基礎(chǔ)上增加一個(gè)path字段,該path字段記錄每個(gè)節(jié)點(diǎn)的路徑,該path字段內(nèi)容為:本節(jié)點(diǎn)及上級(jí)所有節(jié)點(diǎn)通過(guò)字符拼接;得到一新的樹(shù)形數(shù)據(jù)結(jié)構(gòu)表;當(dāng)執(zhí)行數(shù)據(jù)查詢時(shí),根據(jù)所要查詢的節(jié)點(diǎn)的path字段來(lái)匹配節(jié)點(diǎn),查到該節(jié)點(diǎn)下所有節(jié)點(diǎn)。還可以再增加一個(gè)layer字段,該layer字段記錄每個(gè)節(jié)點(diǎn)的層級(jí);步驟3:當(dāng)執(zhí)行數(shù)據(jù)查詢時(shí),根據(jù)所要查詢的節(jié)點(diǎn)的layer字段來(lái)匹配節(jié)點(diǎn),查到某一層級(jí)的所有節(jié)點(diǎn),或者某一層級(jí)的節(jié)點(diǎn)個(gè)數(shù)。本發(fā)明所要解決的技術(shù)問(wèn)題在于提供一種簡(jiǎn)單有效的Mysql數(shù)據(jù)庫(kù)下樹(shù)形數(shù)據(jù)結(jié)構(gòu)的檢索方法,增強(qiáng)sql語(yǔ)句的可讀性、維護(hù)性、可移植能力。
【專利說(shuō)明】一種M ysql數(shù)據(jù)庫(kù)下樹(shù)形數(shù)據(jù)結(jié)構(gòu)的檢索方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及M ysql數(shù)據(jù)庫(kù),屬于數(shù)據(jù)庫(kù)檢索領(lǐng)域,具體是指一種M ysql數(shù)據(jù)庫(kù)下樹(shù)形數(shù)據(jù)結(jié)構(gòu)的檢索方法。
【背景技術(shù)】
[0002]圖1是M ysql數(shù)據(jù)庫(kù)樹(shù)形結(jié)構(gòu)展現(xiàn)形式示意圖。其樹(shù)形結(jié)構(gòu)標(biāo)準(zhǔn)結(jié)構(gòu)圖如圖2所示,圖中表的字段為id,name, fid,其中fid為父結(jié)點(diǎn)id。對(duì)于此種表的檢索方法有兩種:第I種方法是:先通過(guò)Parent_ID查詢出所有子節(jié)點(diǎn),然后依次查詢子節(jié)點(diǎn)下所有下級(jí)節(jié)點(diǎn)。依次循環(huán)。第2種方法是:通過(guò)定義存儲(chǔ)過(guò)程。利用游標(biāo)的下移查找所有節(jié)點(diǎn)。
[0003]以上兩種做法均有缺陷,第I種方法不能夠一次性取出目標(biāo)數(shù)據(jù),需要多次訪問(wèn)數(shù)據(jù)庫(kù),效率極低;第2種方法可讀性差、難以維護(hù)、可移植能力差。
有鑒于此,本發(fā)明人針對(duì)現(xiàn)有技術(shù)的缺陷深入研究,并有本案產(chǎn)生。
【發(fā)明內(nèi)容】
[0004]本發(fā)明所要解決的技術(shù)問(wèn)題在于提供一種簡(jiǎn)單有效的M ysql數(shù)據(jù)庫(kù)下樹(shù)形數(shù)據(jù)結(jié)構(gòu)的檢索方法,增強(qiáng)sql語(yǔ)句的可讀性、維護(hù)性、可移植能力。
[0005]本發(fā)明采用以下技術(shù)方案解決上述技術(shù)問(wèn)題:
技術(shù)方案之一:
一種M ysql數(shù)據(jù)庫(kù)下樹(shù)形數(shù)據(jù)結(jié)構(gòu)的檢索方法,包括如下步驟:
步驟1:在標(biāo)準(zhǔn)的樹(shù)形數(shù)據(jù)結(jié)構(gòu)表的基礎(chǔ)上增加一個(gè)path字段,該path字段記錄每個(gè)節(jié)點(diǎn)的路徑,該path字段內(nèi)容為:本節(jié)點(diǎn)及上級(jí)所有節(jié)點(diǎn)通過(guò)字符拼接;得到一新的樹(shù)形數(shù)據(jù)結(jié)構(gòu)表;
步驟2:當(dāng)執(zhí)行數(shù)據(jù)查詢時(shí),根據(jù)所要查詢的節(jié)點(diǎn)的path字段來(lái)匹配節(jié)點(diǎn),查到該節(jié)點(diǎn)下所有節(jié)點(diǎn)。
[0006]技術(shù)方案之二:
一種M ysql數(shù)據(jù)庫(kù)下樹(shù)形數(shù)據(jù)結(jié)構(gòu)的檢索方法,包括如下步驟:
步驟1:在標(biāo)準(zhǔn)的樹(shù)形數(shù)據(jù)結(jié)構(gòu)表的基礎(chǔ)上增加一個(gè)path字段,該path字段記錄每個(gè)節(jié)點(diǎn)的路徑,該path字段內(nèi)容為:本節(jié)點(diǎn)及上級(jí)所有節(jié)點(diǎn)通過(guò)字符拼接;得到一新的樹(shù)形數(shù)據(jù)結(jié)構(gòu)表;
步驟2:在所述新的樹(shù)形數(shù)據(jù)結(jié)構(gòu)表的基礎(chǔ)上再增加一個(gè)layer字段,該layer字段記錄每個(gè)節(jié)點(diǎn)的層級(jí);
步驟3:當(dāng)執(zhí)行數(shù)據(jù)查詢時(shí),根據(jù)所要查詢的節(jié)點(diǎn)的layer字段來(lái)匹配節(jié)點(diǎn),查到某一層級(jí)的所有節(jié)點(diǎn),或者某一層級(jí)的節(jié)點(diǎn)個(gè)數(shù)。
[0007]本發(fā)明的優(yōu)點(diǎn)在于:數(shù)據(jù)庫(kù)中定義了一張數(shù)據(jù)表,表中存儲(chǔ)樹(shù)形數(shù)據(jù)(如:組織結(jié)構(gòu)、站點(diǎn)地圖)。查詢某一個(gè)節(jié)點(diǎn)下所有子節(jié)點(diǎn)時(shí),通過(guò)創(chuàng)建一個(gè)特殊的路徑字段,提高檢索效率。而查詢某一個(gè)節(jié)點(diǎn)下某一層級(jí)的所有子節(jié)點(diǎn)時(shí),通過(guò)創(chuàng)建一個(gè)層級(jí)字段來(lái)實(shí)現(xiàn)。本發(fā)明簡(jiǎn)單有效,增強(qiáng)sql語(yǔ)句的可讀性、維護(hù)性、可移植能力。
【專利附圖】
【附圖說(shuō)明】
[0008]下面參照附圖結(jié)合實(shí)施例對(duì)本發(fā)明作進(jìn)一步的描述。
[0009]圖1是M ysql數(shù)據(jù)庫(kù)樹(shù)形結(jié)構(gòu)展現(xiàn)形式示意圖。
[0010]圖2是M ysql數(shù)據(jù)庫(kù)樹(shù)形結(jié)構(gòu)標(biāo)準(zhǔn)結(jié)構(gòu)圖。
[0011]圖3是本發(fā)明第一實(shí)施例的樹(shù)形結(jié)構(gòu)示意圖。
[0012]圖4是本發(fā)明第一實(shí)施例的查詢結(jié)果示意圖。
[0013]圖5是本發(fā)明第二實(shí)施例的樹(shù)形結(jié)構(gòu)示意圖。
[0014]圖6是本發(fā)明第二實(shí)施例的查詢結(jié)果示意圖。
[0015]圖7是本發(fā)明第二實(shí)施例的查詢個(gè)數(shù)結(jié)果示意圖。
【具體實(shí)施方式】
[0016]第一實(shí)施例:
一種M ysql數(shù)據(jù)庫(kù)下樹(shù)形數(shù)據(jù)結(jié)構(gòu)的檢索方法,包括如下步驟:
步驟1:在標(biāo)準(zhǔn)的樹(shù)形數(shù)據(jù)結(jié)構(gòu)表的基礎(chǔ)上增加一個(gè)path字段,如圖3所示,該path字段記錄每個(gè)節(jié)點(diǎn)的路徑,該path字段內(nèi)容為:本節(jié)點(diǎn)及上級(jí)所有節(jié)點(diǎn)通過(guò)字符拼接,圖3所示為用冒號(hào)拼接;得到一新的樹(shù)形數(shù)據(jù)`結(jié)構(gòu)表;
步驟2:當(dāng)執(zhí)行數(shù)據(jù)查詢時(shí),如果想要查詢“黑龍江”下所有節(jié)點(diǎn),只要根據(jù)“黑龍江”這個(gè)節(jié)點(diǎn)的path字段來(lái)匹配節(jié)點(diǎn),查到該節(jié)點(diǎn)下所有節(jié)點(diǎn)。
[0017]S ql實(shí)例:查詢“黑龍江”下所有節(jié)點(diǎn)
Select * from location where path like ‘1:5%’ ;
得到的結(jié)果如圖4所示。
[0018]第二實(shí)施例:
一種M ysql數(shù)據(jù)庫(kù)下樹(shù)形數(shù)據(jù)結(jié)構(gòu)的檢索方法,包括如下步驟:
步驟1:在標(biāo)準(zhǔn)的樹(shù)形數(shù)據(jù)結(jié)構(gòu)表的基礎(chǔ)上增加一個(gè)path字段,該path字段記錄每個(gè)節(jié)點(diǎn)的路徑,該path字段內(nèi)容為:本節(jié)點(diǎn)及上級(jí)所有節(jié)點(diǎn)通過(guò)字符拼接;得到一新的樹(shù)形數(shù)據(jù)結(jié)構(gòu)表;
步驟2:在所述新的樹(shù)形數(shù)據(jù)結(jié)構(gòu)表的基礎(chǔ)上再增加一個(gè)layer字段,如圖5所示,該layer字段記錄每個(gè)節(jié)點(diǎn)的層級(jí);
步驟3:當(dāng)執(zhí)行數(shù)據(jù)查詢時(shí),根據(jù)所要查詢的節(jié)點(diǎn)的layer字段來(lái)匹配節(jié)點(diǎn),查到某一層級(jí)的所有節(jié)點(diǎn),或者某一層級(jí)的節(jié)點(diǎn)個(gè)數(shù)。
[0019]S ql實(shí)例:查詢“行政機(jī)構(gòu)”下所有第三級(jí)的節(jié)點(diǎn)
Select * from location where path like H and layer=3 ;
得到的結(jié)果如圖6所示。
[0020]S ql實(shí)例:查詢“行政機(jī)構(gòu)”下所有第三級(jí)的節(jié)點(diǎn)個(gè)數(shù)
Select count (id) from location where path like ^ 1:%> and layer=3 ;
得到的結(jié)果如圖7所示。
[0021]本發(fā)明提供一種簡(jiǎn)單有效的M ysql數(shù)據(jù)庫(kù)下樹(shù)形數(shù)據(jù)結(jié)構(gòu)的檢索方法,增強(qiáng)sql語(yǔ)句的可讀性、維護(hù)性、可移植能力,提高了檢索效率。
[0022]以上所述僅為本發(fā)明的較佳實(shí)施用例而已,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換以及改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.一種M ysql數(shù)據(jù)庫(kù)下樹(shù)形數(shù)據(jù)結(jié)構(gòu)的檢索方法,其特征在于:包括如下步驟: 步驟1:在標(biāo)準(zhǔn)的樹(shù)形數(shù)據(jù)結(jié)構(gòu)表的基礎(chǔ)上增加一個(gè)path字段,該path字段記錄每個(gè)節(jié)點(diǎn)的路徑,該path字段內(nèi)容為:本節(jié)點(diǎn)及上級(jí)所有節(jié)點(diǎn)通過(guò)字符拼接;得到一新的樹(shù)形數(shù)據(jù)結(jié)構(gòu)表; 步驟2:當(dāng)執(zhí)行數(shù)據(jù)查詢時(shí),根據(jù)所要查詢的節(jié)點(diǎn)的path字段來(lái)匹配節(jié)點(diǎn),查到該節(jié)點(diǎn)下所有節(jié)點(diǎn)。
2.—種M ysql數(shù)據(jù)庫(kù)下樹(shù)形數(shù)據(jù)結(jié)構(gòu)的檢索方法,其特征在于:包括如下步驟: 步驟1:在標(biāo)準(zhǔn)的樹(shù)形數(shù)據(jù)結(jié)構(gòu)表的基礎(chǔ)上增加一個(gè)path字段,該path字段記錄每個(gè)節(jié)點(diǎn)的路徑,該path字段內(nèi)容為:本節(jié)點(diǎn)及上級(jí)所有節(jié)點(diǎn)通過(guò)字符拼接;得到一新的樹(shù)形數(shù)據(jù)結(jié)構(gòu)表; 步驟2:在所述新的樹(shù)形數(shù)據(jù)結(jié)構(gòu)表的基礎(chǔ)上再增加一個(gè)layer字段,該layer字段記錄每個(gè)節(jié)點(diǎn)的層級(jí); 步驟3:當(dāng)執(zhí)行數(shù)據(jù)查詢時(shí),根據(jù)所要查詢的節(jié)點(diǎn)的layer字段來(lái)匹配節(jié)點(diǎn),查到某一層級(jí)的所有節(jié)點(diǎn),或者某一層級(jí)的節(jié)點(diǎn)個(gè)數(shù)。
【文檔編號(hào)】G06F17/30GK103853773SQ201210511993
【公開(kāi)日】2014年6月11日 申請(qǐng)日期:2012年12月4日 優(yōu)先權(quán)日:2012年12月4日
【發(fā)明者】高峰 申請(qǐng)人:廈門億聯(lián)網(wǎng)絡(luò)技術(shù)股份有限公司