Mysql 樹形結構表遞迴父級節點函式方法
阿新 • • 發佈:2019-04-15
地區表
通過當前節點編號查詢父級所有編號集合,通過逗號進行分隔(倒序,包含自身編號)
-- 通過當前節點編號查詢父級所有編號集合,通過逗號進行分隔(倒序,包含自身編號) -- 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