程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL遞歸查詢樹狀表的子節點、父節點詳細完成

MySQL遞歸查詢樹狀表的子節點、父節點詳細完成

編輯:MySQL綜合教程

MySQL遞歸查詢樹狀表的子節點、父節點詳細完成。本站提示廣大學習愛好者:(MySQL遞歸查詢樹狀表的子節點、父節點詳細完成)文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL遞歸查詢樹狀表的子節點、父節點詳細完成正文


簡介: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外面多查幾回吧。。。存儲構造有許多長處,包含加速查詢速度、進步平安性等等,然則會加年夜數據庫負荷,許多文章建議聯合應用,小我也認為罕用點會好些。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved