1. 程式人生 > >Mysql 樹形結構表遞迴父級節點函式方法

Mysql 樹形結構表遞迴父級節點函式方法

地區表

通過當前節點編號查詢父級所有編號集合,通過逗號進行分隔(倒序,包含自身編號)

-- 通過當前節點編號查詢父級所有編號集合,通過逗號進行分隔(倒序,包含自身編號)
-- DROP FUNCTION `getDistrictParentIds`;
CREATE FUNCTION `getDistrictParentIds`(nodeId varchar(100)) 
RETURNS varchar(1000) 
BEGIN 
DECLARE pid varchar(100) default ''; 
DECLARE ids varchar(1000) default nodeId; 
 
WHILE nodeId is not null  do 
	SET pid =(SELECT district_pid FROM district WHERE district_id = nodeId); 
	IF pid is not null THEN 
		SET ids = concat(ids, ',', pid); 
		SET nodeId = pid; 
	ELSE 
		SET nodeId = pid; 
	END IF; 
END WHILE; 
return ids;
END

通過當前節點編號查詢父級所有名稱集合,通過逗號進行分隔(正序,包含自身名稱)

-- 通過當前節點編號查詢父級所有名稱集合,通過逗號進行分隔(正序,包含自身名稱)
-- DROP FUNCTION `getDistrictParentNames`;
CREATE FUNCTION `getDistrictParentNames`(nodeId varchar(100)) 
RETURNS varchar(1000) 
BEGIN 
DECLARE pid varchar(100) default ''; 
DECLARE ids varchar(1000) default nodeId; 
 
WHILE nodeId is not null  do 
	SET pid =(SELECT district_pid FROM district WHERE district_id = nodeId); 
	IF pid is not null THEN 
		SET ids = concat(ids, ',', pid); 
		SET nodeId = pid; 
	ELSE 
		SET nodeId = pid; 
	END IF; 
END WHILE; 
return (select group_concat(district_name order by district_id) from district where FIND_IN_SET(district_id,ids) );
END

行業表

通過當前節點編號查詢父級所有編號集合,通過逗號進行分隔(倒序,包含自身編號)

-- 通過當前節點編號查詢父級所有編號集合,通過逗號進行分隔(倒序,包含自身編號)
-- DROP FUNCTION `getIndustryParentIds`;
CREATE FUNCTION `getIndustryParentIds`(nodeId varchar(100)) 
RETURNS varchar(1000) 
BEGIN 
DECLARE pid varchar(100) default ''; 
DECLARE ids varchar(1000) default nodeId; 
 
WHILE nodeId is not null  do 
	SET pid =(SELECT industry_pid FROM industry WHERE industry_id = nodeId); 
	IF pid is not null THEN 
		SET ids = concat(ids, ',', pid); 
		SET nodeId = pid; 
	ELSE 
		SET nodeId = pid; 
	END IF; 
END WHILE; 
return ids;
END

通過當前節點編號查詢父級所有名稱集合,通過逗號進行分隔(正序,包含自身名稱)

-- 通過當前節點編號查詢父級所有名稱集合,通過逗號進行分隔(正序,包含自身名稱)
DROP FUNCTION `getIndustryParentNames`;
CREATE FUNCTION `getIndustryParentNames`(nodeId varchar(100)) 
RETURNS varchar(1000) 
BEGIN 
DECLARE pid varchar(100) default ''; 
DECLARE ids varchar(1000) default nodeId; 
 
WHILE nodeId is not null  do 
	SET pid =(SELECT industry_pid FROM industry WHERE industry_id = nodeId); 
	IF pid is not null THEN 
		SET ids = concat(ids, ',', pid); 
		SET nodeId = pid; 
	ELSE 
		SET nodeId = pid; 
	END IF; 
END WHILE; 
return (select group_concat(industry_name order by industry_level) from industry where FIND_IN_SET(industry_id