mysql递归查询 缓存_mysql递归查询方法|mysql递归查询遇到的坑,教你们解决办法...

1.前言

大家在用mysql递归查询的时候,肯定或多或少的会碰到一些问题,像小编就遇到了天大的坑(如下图),于是自己踩了坑,我得想办法把它铺一铺吖,避免大家也同时遇到这样的问题。让技术人能够快速的解决问题。

遇到问题如图:

1a5780340fede880afadcf51176357c9.png

相信很多人都用不惯mysql,小编也是,oracle的递归查询很简单。就一句sql就可以搞定,还有不清楚或者突然忘记需要温习的小伙伴们,大家可以看小编发的以前的关于oracle递归查询的方法,戳这里:【oracle递归查询方法介绍】

2.踩坑介绍

mysql递归查询,不会吖,大家可以网上搜索递归查询的方法,这一查很多,

比如:https://www.cnblogs.com/xiaoxi/p/5942805.html 或者:https://blog.csdn.net/jian_c/article/details/79854491等等,我就不一一列举啦,但是他们可能也是转载其他人的,其中遇到问题,他们并没有提前向大家说明或者他们自己也没有试过,小编就拿其中的一个方法试了一下,就遇到了如开头所说的一堆问题,所以大家在使用mysql递归方法之前一定要把这篇文章看完,因为你不看的话,等一下你一执行递归查询语句,一试一个错

3.埋坑教程

①递归子节点

咱们先看递归所有的子节点,首先必须得创建辅助函数getChildList(),如下代码

CREATE FUNCTION `getChildList`(rootId INT)

RETURNS varchar(1000)

BEGIN

DECLARE sTemp VARCHAR(1000);

DECLARE sTempChd VARCHAR(1000);

SET sTemp = '$';

SET sTempChd =cast(rootId as CHAR);

WHILE sTempChd is not null DO

SET sTemp = concat(sTemp,',',sTempChd);

SELECT group_concat(id) INTO sTempChd FROM treeNodes where FIND_IN_SET(pid,sTempChd)>0;

END WHILE;

RETURN sTemp;

END

上面这个辅助函数,你不要盲目的全部复制过去,然后一执行就肯定会报错的,一定要注意里面的字段和你创建的表的对应关系,这点也就是和oracle区别最大的地方

看我下面的截图标记的序号分别要注意的要点,

1:你创建的表的主键id,

2:你创建的表名,

3:你创建的表的表示上级的字段,

4:这里可以改可以不改,因为按照mysql这样的情况,如果你的数据库可能将来有多张表会用到递归查询的话,这里最好换个名字,比如getchildListTablename,tablename可以换成你2里面的表名,当然小编这里只是建议。

12801afb8ef3cb39eb0ca3c442466c90.png

②递归父节点

那么接下来的递归所有的父节点,也是同样的道理,

咱们先创建辅助函数getParList(),

CREATE FUNCTION `getParList`(rootId INT)

RETURNS varchar(1000)

BEGIN

DECLARE sTemp VARCHAR(1000);

DECLARE sTempPar VARCHAR(1000);

SET sTemp = '';

SET sTempPar =rootId;

WHILE sTempPar is not null DO

IF sTemp != '' THEN

SET sTemp = concat(sTemp,',',sTempPar);

ELSE

SET sTemp = sTempPar;

END IF;

SET sTemp = concat(sTemp,',',sTempPar);

SELECT group_concat(pid) INTO sTempPar FROM treenodes where pid<>id and FIND_IN_SET(id,sTempPar)>0;

END WHILE;

RETURN sTemp;

END

这个也是一样,不要盲目的复制过去执行,要跟你的表一一对应,我已经帮大家标记好了,将1到5的数据,换成你创建的表名主键,表名和表示上级的字段,6可改可不改,你怎么高兴怎么来

85a51a82f33c64b38f8c9fb61d153100.png

4.总结

上面这些,就是小编在用mysql递归查询遇到的坑,如果你还没有遇到,恭喜你,看完这篇文章可以避免踩坑了,但是记得点个赞吖。哈哈哈哈哈。如果大家对于mysql有更好的方法以及自己的独特见解,欢迎在留言处留言或者留下你的文章链接,咱们一起学习一起进步

参考文章

感谢原作者的分享,让技术人能够更快的解决问题

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值