mysql之递归树查询
写在前面
最近一段时间做的产品使用到了mysql数据库,虽然之前也使用过,但都是在业余时间使用,真正在项目中使用还是发现mysql的一些不同之处,比如函数、存储过程等,写起来还是比较费劲,这里用几篇博客把遇到的问题总结一下,用于以后温故而知新!
mysql 中想使用递归树查询,实现和 oracle数据库 select * from dept start with dept_no = '123' connect by prior dept_no = p_dept_no
样的效果,没有直接可以使用的语法,但可以通过自定义函数去实现。
比如我们创建部门表 dept
create table dept
(
id varchar(60) comment '主键'
dept_no varchar(32) comment '部门编号',
p_dept_no varchar(32) comment '部门编号' )
;
要查询某个部门下的所有部门,则可以创建自定义函数如下:
FUNCTION `get_child_list`(in_id varchar(10)) RETURNS varchar(1000) CHARSET
begin
declare ids varchar(1000) default '';
declare tempids varchar(1000);
set tempids = in_id;
while tempids is not null do
set ids = CONCAT_WS(',',ids,tempids);
select GROUP_CONCAT(org_code) into tempids from sys_org where FIND_IN_SET(parent_org_code,tempids)>0;
end while;
return ids;
end
最终查询语句如下:
SELECT * FROM sys_org WHERE FIND_IN_SET(org_code, get_child_list('1000'));