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

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

MySQL遞歸查詢樹狀表的子節(jié)點(diǎn)、父節(jié)點(diǎn)具體實現(xiàn)

2020-01-18 23:20:42
字體:
供稿:網(wǎng)友
簡介:mysql5.0.94版本,該版本以及較高級的版本(5.5、6等等)尚未支持循環(huán)遞歸查詢,和sqlserver、oracle相比,mysql難于在樹狀表中層層遍歷的子節(jié)點(diǎn)。本程序重點(diǎn)參考了下面的資料,寫了兩個sql存儲過程,子節(jié)點(diǎn)查詢算是照搬了,父節(jié)點(diǎn)查詢是逆思維弄的。

表結(jié)構(gòu)和表數(shù)據(jù)就不公示了,查詢的表user_role,主鍵是id,每條記錄有parentid字段(對應(yīng)該記錄的父節(jié)點(diǎn),當(dāng)然,一個父節(jié)點(diǎn)自然會有一個以上的子節(jié)點(diǎn)嘛)
復(fù)制代碼 代碼如下:

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;
/*獲取子節(jié)點(diǎn)*/
/*調(diào)用: 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;
/*獲取父節(jié)點(diǎn)*/
/*調(diào)用: 1、select getParentList(6) id; 2、select * From user_role where FIND_IN_SET(id, getParentList(2));*/

弄完了,pm說不要弄存儲結(jié)構(gòu),在java里面多查幾次吧。。。存儲結(jié)構(gòu)有很多優(yōu)點(diǎn),包括加快查詢速度、提高安全性等等,但是會加大數(shù)據(jù)庫負(fù)荷,很多文章建議結(jié)合使用,個人也覺得少用點(diǎn)會好些。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 阳信县| 沂源县| 吉林市| 香港| 五家渠市| 肇源县| 类乌齐县| 布尔津县| 雅安市| 曲水县| 拜泉县| 益阳市| 丽江市| 巨鹿县| 津南区| 家居| 三都| 禄丰县| 弋阳县| 郎溪县| 卢湾区| 柳江县| 嘉义县| 武宁县| 六盘水市| 宜城市| 淳化县| 略阳县| 托克逊县| 斗六市| 孙吴县| 乐东| 锡林浩特市| 磐石市| 南木林县| 宣城市| 三明市| 屏山县| 敖汉旗| 苍山县| 晋宁县|