国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MySQL遞歸查詢樹狀表的子節點、父節點具體實現

2024-07-24 13:05:37
字體:
來源:轉載
供稿:網友
簡介:mysql5.0.94版本,該版本以及較高級的版本(5.5、6等等)尚未支持循環遞歸查詢,和sqlserver、oracle相比,mysql難于在樹狀表中層層遍歷的子節點。本程序重點參考了下面的資料,寫了兩個sql存儲過程,子節點查詢算是照搬了,父節點查詢是逆思維弄的。

表結構和表數據就不公示了,查詢的表user_role,主鍵是id,每條記錄有parentid字段(對應該記錄的父節點,當然,一個父節點自然會有一個以上的子節點嘛)

復制代碼 代碼如下:


CREATE FUNCTION `getChildList`(rootId INT)
RETURNS varchar(1000)
BEGIN
DECLARE sChildList VARCHAR(1000);
DECLARE sChildTemp VARCHAR(1000);
SET sChildTemp =cast(rootId as CHAR);
WHILE sChildTemp is not null DO
IF (sChildList is not null) THEN
SET sChildList = concat(sChildList,',',sChildTemp);
ELSE
SET sChildList = concat(sChildTemp);
END IF;
SELECT group_concat(id) INTO sChildTemp FROM user_role where FIND_IN_SET(parentid,sChildTemp)>0;
END WHILE;
RETURN sChildList;
END;
/*獲取子節點*/
/*調用: 1、select getChildList(0) id; 2、select * 5From user_role where FIND_IN_SET(id, getChildList(2));*/


CREATE FUNCTION `getParentList`(rootId INT)
RETURNS varchar(1000)
BEGIN
DECLARE sParentList varchar(1000);
DECLARE sParentTemp varchar(1000);
SET sParentTemp =cast(rootId as CHAR);
WHILE sParentTemp is not null DO
IF (sParentList is not null) THEN
SET sParentList = concat(sParentTemp,',',sParentList);
ELSE
SET sParentList = concat(sParentTemp);
END IF;
SELECT group_concat(parentid) INTO sParentTemp FROM user_role where FIND_IN_SET(id,sParentTemp)>0;
END WHILE;
RETURN sParentList;
END;
/*獲取父節點*/
/*調用: 1、select getParentList(6) id; 2、select * From user_role where FIND_IN_SET(id, getParentList(2));*/


弄完了,pm說不要弄存儲結構,在java里面多查幾次吧。。。存儲結構有很多優點,包括加快查詢速度、提高安全性等等,但是會加大數據庫負荷,很多文章建議結合使用,個人也覺得少用點會好些。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 罗平县| 香格里拉县| 新昌县| 白山市| 唐河县| 老河口市| 石景山区| 星子县| 连平县| 西乡县| 天镇县| 台州市| 无为县| 瑞昌市| 探索| 堆龙德庆县| 无锡市| 宁城县| 独山县| 荣成市| 河北省| 灵山县| 方山县| 盖州市| 台山市| 陕西省| 尉犁县| 临猗县| 寿光市| 湘阴县| 枣庄市| 什邡市| 察雅县| 武功县| 红原县| 九龙县| 桃园县| 吴川市| 麻阳| 社旗县| 新龙县|