以下是我查找树的函数
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层就不要再去查询了。请问怎么办呢?

解决方案 »

  1.   

    http://blog.csdn.net/ACMAIN_CHM/article/details/4142971
    可以看下
      

  2.   

    楼上的,这文章我已经看了很多次。
    我尝试设置 
    max_sp_recursion_depth = 5 ;
    但查找树的结果仍是所有深度。
    如何才能只搜索  5层深度呢?
      

  3.   


    在你的函数里,增加一个变量,初始值为0,每次while循环内,就增加1,当大于5的时候,就跳出循环。
      

  4.   


    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
    //