mysql实现查询指定父级下的所有子级

MySQL 中没有支持递归的查询,自行编写函数实现。

如数据库里有部门表dept,字段有id、name、pid

create table dept(
  id int(11) not null,
  name varchar(20),
  pid int(11) not null,
  primary key(id)
);

插入数据:

insert into dept(id,name,pid) values(1,'A',0);
insert into dept(id,name,pid) values(2,'B',0);
insert into dept(id,name,pid) values(3,'A1',1);
insert into dept(id,name,pid) values(4,'A2',1);
insert into dept(id,name,pid) values(5,'A11',3);
insert into dept(id,name,pid) values(6,'A21',4);
insert into dept(id,name,pid) values(7,'A22',4);

查询:

select * from dept;

+----+------+-----+
| id | name | pid |
+----+------+-----+
|  1 | A    |   0 |
|  2 | B    |   0 |
|  3 | A1   |   1 |
|  4 | A2   |   1 |
|  5 | A11  |   3 |
|  6 | A21  |   4 |
|  7 | A22  |   4 |
+----+------+-----+

编写函数:

CREATE FUNCTION `getChild`(rootId varchar(36)) RETURNS varchar(1000)
BEGIN
    DECLARE ptemp VARCHAR(1000);
    DECLARE ctemp VARCHAR(1000);
    SET ptemp = '#';
    SET ctemp = rootId;
    WHILE ctemp IS NOT NULL DO
      SET ptemp = concat(ptemp, ',', ctemp);
      SELECT group_concat(id)
      INTO ctemp
      FROM dept
      WHERE FIND_IN_SET(pid, ctemp) > 0;
    END WHILE;
    RETURN ptemp;
  END

自定义函数说明:

参数rootId为指定门店ID,ptemp为最终返回变量,ctemp为中间变量,最终返回是“#,1,2”格式的字符串。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lamyuu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值