版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CutelittleBo/article/details/79621711
查询子集合
创建函数
--drop FUNCTION `getChildList`
CREATE FUNCTION `getChildList`(rootId varchar(100))
RETURNS LONGTEXT
BEGIN
DECLARE str LONGTEXT;
DECLARE cid LONGTEXT;
SET str = '$';
SET cid = rootId;
WHILE cid is not null DO
SET str = concat(str, ',', cid);
SELECT group_concat(id) INTO cid FROM treeNodes where FIND_IN_SET(parentid, cid) > 0;
END WHILE;
RETURN str;
END
查询
select getChildList('447');
查询父集合
创建函数
--drop FUNCTION `getParentList`
CREATE FUNCTION `getParentList`(rootId varchar(100))
RETURNS varchar(1000)
BEGIN
DECLARE fid varchar(100) default '';
DECLARE str varchar(1000) default rootId;
WHILE rootId is not null do
SET fid =(SELECT parentid FROM treeNodes WHERE id = rootId);
IF fid is not null THEN
SET str = concat(str, ',', fid);
SET rootId = fid;
ELSE
SET rootId = fid;
END IF;
END WHILE;
return str;
END
查询
select getParentList('1088');
问题说明
关于LONGTEXT的说明
在我实际使用过程中,varchar已经不满足我所处理的数据长度,所以在此使用了LONGTEXT,最大长度为4 294 967 295个字符
关于使用group_concat字符串过长被截取的问题
修改配置文件:my.ini
在[mysqld]下新增配置:group_concat_max_len = 102400
参考文章
关于父集合查询说明
在使用过程中,未使用到查询父集合,所以此方法并没有验证,摘自:mysql递归查询
转载请注明出处: 桑博:http://blog.csdn.net/CutelittleBo/article/details/79621711