最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL遞歸查找樹形結(jié)構(gòu)(這個(gè)方法太實(shí)用了!)

 更新時(shí)間:2022年11月09日 10:21:59   作者:肥肥技術(shù)宅  
對于數(shù)據(jù)庫中的樹形結(jié)構(gòu)數(shù)據(jù),如部門表,有時(shí)候,我們需要知道某部門的所有下屬部分或者某部分的所有上級部門,這時(shí)候就需要用到mysql的遞歸查詢,下面這篇文章主要給大家介紹了關(guān)于MySQL遞歸查找樹形結(jié)構(gòu)的相關(guān)資料,需要的朋友可以參考下

這兩天,遇到了重要節(jié)點(diǎn)的需求。這里簡單做個(gè)總結(jié)。

1、數(shù)據(jù)庫中的樹形結(jié)構(gòu)

數(shù)據(jù)庫中存貯的數(shù)據(jù),以ID和P_ID(父id),來存貯樹形結(jié)構(gòu)

這樣如果需要查找某個(gè)節(jié)點(diǎn)的子節(jié)點(diǎn),就可以尋找P_ID。如果要查找所有子節(jié)點(diǎn),就需要遍歷所有的子節(jié)點(diǎn)的子節(jié)點(diǎn)。

如果要判斷是否為同級的節(jié)點(diǎn),就可以查找是否有相同的節(jié)點(diǎn)。

2、MySQL中如何查找相應(yīng)的數(shù)據(jù)

這里,我采用的是一個(gè)存儲(chǔ)函數(shù)。在查詢時(shí)可以直接使用。當(dāng)然,為了以后查詢方便,也可以在一個(gè)視圖使用。

3、準(zhǔn)備工作

數(shù)據(jù)庫表,為了方便,只有三個(gè)字段,能夠說明情況即可。

CREATE TABLE `city` (
`i_id`  int(11) NOT NULL AUTO_INCREMENT ,
`p_id`  int(11) NULL DEFAULT NULL ,
`c_name`  varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
PRIMARY KEY (`i_id`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
AUTO_INCREMENT=11
ROW_FORMAT=COMPACT;

隨便插入幾條數(shù)據(jù)

實(shí)現(xiàn)介紹兩個(gè)關(guān)鍵的函數(shù)

group_concat(column_name): 多條記錄合成一條記錄

SELECT GROUP_CONCAT(i_id)
FROM city
WHERE p_id='2'

find_in_set(column_name, strlist)在多條記錄中查詢特定列

SELECT * FROM city
WHERE FIND_IN_SET(p_id,'1,4')

4.具體的實(shí)現(xiàn)(由淺入深)

1.只查具體一級下級

SELECT GROUP_CONCAT(i_id) AS ids
FROM city
WHERE p_id=1;

2.查詢某一個(gè)節(jié)點(diǎn)的子節(jié)點(diǎn)

在存貯函數(shù)之前,要注意一點(diǎn)。雖然參數(shù)名是 param_i_id,但查詢時(shí) 要讓p_id=param_i_id

CREATE DEFINER = `root`@`localhost` FUNCTION `getSubNodes`(param_i_id  int)
 RETURNS varchar(100)
BEGIN
 
#輸入I_ID 輸出此I_ID下的所有子節(jié)點(diǎn)(只有一級)
 
  DECLARE strSubIds VARCHAR(100);
  DECLARE strPid VARCHAR(100);
  SET strSubIds = '$';
  SET strPid =cast(param_i_id as CHAR);
  SELECT GROUP_CONCAT(i_id) INTO strSubIds FROM city WHERE p_id=strPid;
  RETURN strSubIds;
END;

這樣,就可以在查詢語句中使用

3.查詢所有下級

查到了一級,只要循環(huán)查詢到某一個(gè)節(jié)點(diǎn)(這個(gè)節(jié)點(diǎn)沒有子節(jié)點(diǎn)),就結(jié)束

CREATE DEFINER = `root`@`localhost` FUNCTION `getAllSubNodes`(`param_i_id` int)
 RETURNS varchar(100)
BEGIN
 
DECLARE strAllSubIds VARCHAR(100);
DECLARE strTempPid VARCHAR(100);
 
#先得到第一級,也可以掉用getSubNodes(param_i_id);
 
# SELECT GROUP_CONCAT(i_id) INTO strAllSubIds FROM city WHERE p_id=param_i_id;
 SET strAllSubIds = getSubNodes(param_i_id);
SET strTempPid = strAllSubIds;
 
#根據(jù) strTempPid 判斷是否還有子節(jié)點(diǎn)
 
WHILE strTempPid is not null DO
SELECT group_concat(i_id) INTO strTempPid FROM city WHERE FIND_IN_SET(p_id,strTempPid)>0;
 
#需要對strTempPid判斷,非空用 , 連接
 
IF (strTempPid is not NULL) THEN
SET strAllSubIds = concat(strAllSubIds,',',strTempPid);
 
END IF;
END WHILE;
RETURN strAllSubIds;
END;

總結(jié)

到此這篇關(guān)于MySQL遞歸查找樹形結(jié)構(gòu)的文章就介紹到這了,更多相關(guān)MySQL遞歸查找樹形結(jié)構(gòu)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JDBC數(shù)據(jù)庫的使用操作總結(jié)

    JDBC數(shù)據(jù)庫的使用操作總結(jié)

    本篇文章介紹了,JDBC數(shù)據(jù)庫的使用操作方法的一些總結(jié)。需要的朋友可以參考一下
    2013-05-05
  • SQL中CONVERT轉(zhuǎn)換函數(shù)的簡單使用方法

    SQL中CONVERT轉(zhuǎn)換函數(shù)的簡單使用方法

    CONVERT()函數(shù)對于簡單類型轉(zhuǎn)換,CONVERT()函數(shù)和CAST()函數(shù)的功能相同,只是語法不同,下面這篇文章主要給大家介紹了關(guān)于SQL中CONVERT轉(zhuǎn)換函數(shù)的簡單使用方法,需要的朋友可以參考下
    2024-01-01
  • MySQL中使用正則表達(dá)式詳情

    MySQL中使用正則表達(dá)式詳情

    這牌你文章主要給大家分享的是MySQL中使用正則表達(dá)式詳情,MySQL中支持正則表達(dá)式匹配,在復(fù)雜的過濾條件中,可以考慮使用正則表達(dá)式。使用正則表達(dá)式需要掌握一些正則表達(dá)式的語法和指令,下面來看看文章的詳細(xì)內(nèi)容介紹吧,希望對你有所幫助
    2021-11-11
  • Mysql查詢語句優(yōu)化技巧

    Mysql查詢語句優(yōu)化技巧

    這篇文章主要介紹了Mysql查詢語句優(yōu)化技巧的相關(guān)資料,需要的朋友可以參考下
    2016-04-04
  • mysql插入數(shù)據(jù)INSERT INTO SET的優(yōu)勢

    mysql插入數(shù)據(jù)INSERT INTO SET的優(yōu)勢

    這篇文章介紹了mysql插入數(shù)據(jù)INSERT INTO SET的優(yōu)勢,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • Mysql動(dòng)態(tài)更新數(shù)據(jù)庫腳本的示例講解

    Mysql動(dòng)態(tài)更新數(shù)據(jù)庫腳本的示例講解

    今天小編就為大家分享一篇關(guān)于Mysql動(dòng)態(tài)更新數(shù)據(jù)庫腳本的示例講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • MySQL數(shù)據(jù)庫存儲(chǔ)引擎介紹及數(shù)據(jù)庫的操作詳解

    MySQL數(shù)據(jù)庫存儲(chǔ)引擎介紹及數(shù)據(jù)庫的操作詳解

    mysql面試中最常問的問題之一:小伙子,你說一下你們公司用的存儲(chǔ)引擎,以及你知道有哪些存儲(chǔ)引擎和他們之間的區(qū)別? 所以下面這篇文章主要給大家介紹了關(guān)于Mysql存儲(chǔ)引擎的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • sql語句中日期相減的操作實(shí)例代碼

    sql語句中日期相減的操作實(shí)例代碼

    在工作中遇到時(shí)間處理,學(xué)習(xí)了一下SQL的日期處理方面,下面這篇文章主要給大家介紹了關(guān)于sql語句中日期相減操作的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • windows 10下mysql 5.7.21 winx64安裝配置方法圖文教程

    windows 10下mysql 5.7.21 winx64安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了windows 10下mysql 5.7.21 winx64安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • CentOS7.3下mysql 8.0.13安裝配置方法圖文教程

    CentOS7.3下mysql 8.0.13安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了CentOS7.3下mysql 8.0.13安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11

最新評論

西乡县| 徐汇区| 镇雄县| 铁岭市| 陆良县| 沂水县| 富源县| 肇源县| 汤原县| 聂拉木县| 扎鲁特旗| 城口县| 社会| 界首市| 巴楚县| 宁河县| 铜鼓县| 泉州市| 洪江市| 锦州市| 铜川市| 白银市| 南投市| 崇礼县| 儋州市| 犍为县| 陇川县| 和平县| 嵩明县| 霍林郭勒市| 大荔县| 扶余县| 江华| 南漳县| 九台市| 五常市| 琼中| 新津县| 阿勒泰市| 灵台县| 镶黄旗|