mysql自定义函数查找树,如何设置查询深度?

qq_32675915 2015-11-09 01:25:51

以下是我查找树的函数
delimiter //
DROP FUNCTION IF EXISTS `getChildLst`;
CREATE FUNCTION `getChildLst`(rootId INT)
RETURNS varchar(4000)
BEGIN
DECLARE sTemp VARCHAR(4000);
DECLARE sTempChd VARCHAR(4000);
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 cpa_user where FIND_IN_SET(pid,sTempChd)>0;
END WHILE;
RETURN sTemp;
END
//


调用方法 select * from cpa_user where FIND_IN_SET(id, getChildLst(1))
这个调用后得到树是查询的深度是直接查到底的,
现在的问题是,我想查询树的深度为5层,超过5层就不要再去查询了。请问怎么办呢?

...全文
217 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
LongRui888 2015-11-10
  • 打赏
  • 举报
回复
delimiter // DROP FUNCTION IF EXISTS `getChildLst`; CREATE FUNCTION `getChildLst`(rootId INT) RETURNS varchar(4000) BEGIN DECLARE sTemp VARCHAR(4000); DECLARE sTempChd VARCHAR(4000); declare vLoop int; SET sTemp = '$'; SET sTempChd =cast(rootId as CHAR); set vLoop = 0; WHILE (sTempChd is not null and vLoop <=5)DO SET sTemp = concat(sTemp,',',sTempChd); SELECT group_concat(id) INTO sTempChd FROM cpa_user where FIND_IN_SET(pid,sTempChd)>0; set vLoop = vLoop + 1; END WHILE; RETURN sTemp; END //
LongRui888 2015-11-10
  • 打赏
  • 举报
回复
引用 2 楼 qq_32675915 的回复:
楼上的,这文章我已经看了很多次。 我尝试设置 max_sp_recursion_depth = 5 ; 但查找树的结果仍是所有深度。 如何才能只搜索 5层深度呢?
在你的函数里,增加一个变量,初始值为0,每次while循环内,就增加1,当大于5的时候,就跳出循环。
qq_32675915 2015-11-09
  • 打赏
  • 举报
回复
楼上的,这文章我已经看了很多次。 我尝试设置 max_sp_recursion_depth = 5 ; 但查找树的结果仍是所有深度。 如何才能只搜索 5层深度呢?
rick-he 2015-11-09
  • 打赏
  • 举报
回复
http://blog.csdn.net/ACMAIN_CHM/article/details/4142971 可以看下

57,063

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧