Code Bye

MYSQL报错:Error Code: 1406. Data too long for column 'sTemp' at row

本人的函数定义如下:
CREATE DEFINER=`root`@`localhost` FUNCTION `getChildLst`(rootId int,direction int) RETURNS varchar(1000) CHARSET utf8
BEGIN
 DECLARE sTemp VARCHAR(5000);
   DECLARE sTempChd VARCHAR(1000);
   SET sTemp = ""$"";
   IF direction=1 THEN
     SET sTempChd =cast(rootId as CHAR);
   ELSEIF direction=2 THEN SELECT cast(ParentId as CHAR) into sTempChd FROM Tree WHERE Id=rootId;END IF;
    WHILE sTempChd is not null DO
        SET sTemp = concat(sTemp,"","",sTempChd);
        SELECT group_concat(id) INTO sTempChd FROM Tree where (direction=1 and  FIND_IN_SET(ParentId,sTempChd)>0)
        or (direction=2 and  FIND_IN_SET(Id,sTempChd)>0);
    END WHILE;
RETURN sTemp;
END

就是一个根据ID获取下级或父级ID

用法:

select * from tree where find_in_set(id,getChildLst(3,1)); 下查没有问题

select * from tree where find_in_set(id,getChildLst(3,2));上查就报错

报错:

Error Code: 1406. Data too long for column “”sTemp”” at row 7

本人初用MYSQL,求MYSQL高手!

解决方案:10分
direction为2的时候这个是个死循环啊。

WHILE sTempChd is not null DO
SET sTemp = concat(sTemp,””,””,sTempChd);
SELECT group_concat(id) INTO sTempChd FROM Tree where (direction=1 and  FIND_IN_SET(ParentId,sTempChd)>0)
or (direction=2 and  FIND_IN_SET(Id,sTempChd)>0);

解决方案:10分
可以参考下贴中写法。
http://blog.csdn.net/acmain_chm/article/details/4142971

MySQL中进行树状全部子节点的查询

在Oracle 中我们知道有一个 Hierarchical Queries 通过CONNECT BY 我们可以方便的查了全部当前节点下的全部子节点。但很遗憾,在MySQL的目前版本中还没有对应的功能。 在MySQL中假如是有限的层次,例如我们事先假如可以确定这个树的最大深度是4, 那么全部节点为根的树的深度均不会超过4,则我们可以直接通过left join 来实现。 但很多时候我们…


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明MYSQL报错:Error Code: 1406. Data too long for column 'sTemp' at row