亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MySQL遞歸查找樹形結構(這個方法太實用了!)

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

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

1、數(shù)據(jù)庫中的樹形結構

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

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

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

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

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

3、準備工作

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

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ù)

實現(xià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.具體的實現(xiàn)(由淺入深)

1.只查具體一級下級

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

2.查詢某一個節(jié)點的子節(jié)點

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

CREATE DEFINER = `root`@`localhost` FUNCTION `getSubNodes`(param_i_id  int)
 RETURNS varchar(100)
BEGIN
 
#輸入I_ID 輸出此I_ID下的所有子節(jié)點(只有一級)
 
  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)查詢到某一個節(jié)點(這個節(jié)點沒有子節(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é)點
 
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;

總結

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

相關文章

  • mysql下的max_allowed_packet參數(shù)設置詳解

    mysql下的max_allowed_packet參數(shù)設置詳解

    本文主要介紹了mysql下的max_allowed_packet參數(shù)設置詳解,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • mysql存儲過程之循環(huán)語句(WHILE,REPEAT和LOOP)用法分析

    mysql存儲過程之循環(huán)語句(WHILE,REPEAT和LOOP)用法分析

    這篇文章主要介紹了mysql存儲過程之循環(huán)語句(WHILE,REPEAT和LOOP)用法,結合實例形式分析了mysql存儲過程循環(huán)語句WHILE,REPEAT和LOOP的原理、用法及相關操作注意事項,需要的朋友可以參考下
    2019-12-12
  • MySQL count(1)、count(*)、count(字段)的區(qū)別

    MySQL count(1)、count(*)、count(字段)的區(qū)別

    COUNT在數(shù)據(jù)庫行數(shù)統(tǒng)計中被廣泛使用,那么你知道MySQL count(1)、count(*)、count(字段)的區(qū)別嗎,本文就想的介紹一下,感興趣的可以了解一下
    2021-12-12
  • mysql 設置自動創(chuàng)建時間及修改時間的方法示例

    mysql 設置自動創(chuàng)建時間及修改時間的方法示例

    這篇文章主要介紹了mysql 設置自動創(chuàng)建時間及修改時間的方法,結合實例形式分析了mysql針對創(chuàng)建時間及修改時間相關操作技巧,需要的朋友可以參考下
    2019-09-09
  • 關于SQL?Update的四種常見寫法

    關于SQL?Update的四種常見寫法

    這篇文章主要介紹了關于SQL?Update的四種常見寫法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 關于MySQL?B+樹索引與哈希索引詳解

    關于MySQL?B+樹索引與哈希索引詳解

    索引是一種特殊的數(shù)據(jù)庫結構,被設計用來快速查詢數(shù)據(jù)庫表中的特定記錄,下面這篇文章主要給大家介紹了關于MySQL?B+樹索引與哈希索引的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-03-03
  • MYSQL函數(shù)的使用梳理

    MYSQL函數(shù)的使用梳理

    本篇文章講解是是MySQL的函數(shù)方法,涵蓋所有的MySQL常見的方法,MySQL函數(shù),是一種控制流程函數(shù),屬于數(shù)據(jù)庫用語言,以下列出了這些函數(shù)的說明
    2022-05-05
  • MySQL與PHP的基礎與應用專題之自連接

    MySQL與PHP的基礎與應用專題之自連接

    MySQL是一個關系型數(shù)據(jù)庫管理系統(tǒng),由瑞典MySQL AB 公司開發(fā),屬于 Oracle 旗下產(chǎn)品。MySQL 是最流行的關系型數(shù)據(jù)庫管理系統(tǒng)之一,本系列將帶你掌握php與mysql的基礎應用,本篇從自連接開始
    2022-02-02
  • MySQL針對Discuz論壇程序的基本優(yōu)化教程

    MySQL針對Discuz論壇程序的基本優(yōu)化教程

    這篇文章主要介紹了MySQL針對Discuz論壇程序的基本優(yōu)化教程,包括在緩存和索引等方面的優(yōu)化方法,需要的朋友可以參考下
    2015-11-11
  • 傻瓜式用Eclipse連接MySQL數(shù)據(jù)庫

    傻瓜式用Eclipse連接MySQL數(shù)據(jù)庫

    本來不想寫這么簡單人文章,在百度上搜索我這個標題,完全符合標題的一大堆。但我按照那些文章?lián)v鼓了很久,就是不行。
    2015-09-09

最新評論