递归查询(简单粗暴),新手必备
1.首先需要建一张表(不做过多介绍)
唯一要求,表中有 父子关系的ID 就可以
2 ,创建两个函数--------注意是两个(复制到你的sql工具里面直接运行一下即可)
-------------------------上代码------------------------------
-----------------------------------------------------------一级查询(只查下一级)------------------------------------
CREATE DEFINER=`root`@`localhost` FUNCTION `getTaskNodes`(param_i_id int) RETURNS varchar(100) CHARSET utf8mb4
READS SQL DATA
BEGIN
DECLARE strSubIds VARCHAR(100);
DECLARE strPid VARCHAR(100);
SET strSubIds = '$';
SET strPid =cast(param_i_id as CHAR);
SELECT GROUP_CONCAT(“子ID”) INTO strSubIds FROM 表名 WHERE 父ID=strPid;
RETURN strSubIds;
END
注:以上的子ID 父ID 均填写自己表中的 ID字段 例如: c_id , p_id
----------------------------------多级查询,一直到底-----------------------------------
CREATE DEFINER=`root`@`localhost` FUNCTION `getAllTaskNodes`(`param_i_id` int) RETURNS varchar(100) CHARSET utf8mb4
READS SQL DATA
BEGIN
DECLARE strAllSubIds VARCHAR(100);
DECLARE strTempPid VARCHAR(100);
#先得到第一级,也可以掉用getSubNodes(param_i_id);
# SELECT GROUP_CONCAT(子ID) INTO strAllSubIds FROM 表名 WHERE 父ID=param_i_id;
SET strAllSubIds = getTaskNodes(param_i_id);
SET strTempPid = strAllSubIds;
#根据 strTempPid 判断是否还有子节点
WHILE strTempPid is not null DO
SELECT group_concat(dept_id) INTO strTempPid FROM employee_task WHERE FIND_IN_SET(parent_id,strTempPid)>0;
#需要对strTempPid判断,非空用 , 连接
IF (strTempPid is not NULL) THEN
SET strAllSubIds = concat(strAllSubIds,',',strTempPid);
END IF;
END WHILE;
RETURN strAllSubIds;
END
-----------------------------------------------------以上为两个函数------------------------------------------------
最后需要调用的查询sql 语句
select * from 表名 where find_in_set(子ID字段, getAllTaskNodes(#{子ID的值}))
-----------------------------好了,一个递归查询就是这么简单---------------------------------------
注意:对于新手,直接复制粘贴即可,把其中的汉字,改成你自己的 字段以及 表名就行!!!