Mysql 树形结构表递归父级节点函数方法

地区表

经过当前节点编号查询父级全部编号集合,经过逗号进行分隔(倒序,包含自身编号)node

-- 经过当前节点编号查询父级全部编号集合,经过逗号进行分隔(倒序,包含自身编号)
-- 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

经过当前节点编号查询父级全部名称集合,经过逗号进行分隔(正序,包含自身名称)code

-- 经过当前节点编号查询父级全部名称集合,经过逗号进行分隔(正序,包含自身名称)
-- 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

行业表

经过当前节点编号查询父级全部编号集合,经过逗号进行分隔(倒序,包含自身编号)get

-- 经过当前节点编号查询父级全部编号集合,经过逗号进行分隔(倒序,包含自身编号)
-- 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

经过当前节点编号查询父级全部名称集合,经过逗号进行分隔(正序,包含自身名称)select

-- 经过当前节点编号查询父级全部名称集合,经过逗号进行分隔(正序,包含自身名称)
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,ids));
END
相关文章
相关标签/搜索