1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > mysql递归查询方法|mysql递归查询遇到的坑 教你们解决办法

mysql递归查询方法|mysql递归查询遇到的坑 教你们解决办法

时间:2023-03-11 06:03:26

相关推荐

mysql递归查询方法|mysql递归查询遇到的坑 教你们解决办法

1.前言

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

遇到问题如图:

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

2.踩坑介绍

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

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

3.埋坑教程

我就以这篇文章为例了:/jian_c/article/details/79854491

①递归子节点

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

CREATE FUNCTION `getChildList`(rootId INT)RETURNS varchar(1000) BEGINDECLARE sTemp VARCHAR(1000);DECLARE sTempChd VARCHAR(1000);SET sTemp = '$';SET sTempChd =cast(rootId as CHAR);WHILE sTempChd is not null DOSET 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里面的表名,当然小编这里只是建议。

②递归父节点

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

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

CREATE FUNCTION `getParList`(rootId INT)RETURNS varchar(1000) BEGINDECLARE sTemp VARCHAR(1000);DECLARE sTempPar VARCHAR(1000); SET sTemp = ''; SET sTempPar =rootId; WHILE sTempPar is not null DO IF sTemp != '' THENSET sTemp = concat(sTemp,',',sTempPar);ELSESET 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可改可不改,你怎么高兴怎么来

4.总结

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

参考文章

/jian_c/article/details/79854491

/xiaoxi/p/5942805.html

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。