包含mysql 递归查询父节点 和子节点
2017-09-19 00:30 youxin 阅读(1227) 评论(0) 编辑 收藏 举报mysql递归查询,查父集合,查子集合
查子集合
--drop FUNCTION `getChildList` CREATE FUNCTION `getChildList`(rootId varchar(100)) RETURNS varchar(2000) BEGIN DECLARE str varchar(2000); DECLARE cid varchar(100); 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 getParentList('001001001');
- select * from sbkfwh where FIND_IN_SET(id,getChildList('001001001'))
对上面的改进:
set global log_bin_trust_function_creators = 1; CREATE FUNCTION `getChildList`(rootId varchar(100),which_level INTEGER) RETURNS varchar(2000) BEGIN DECLARE str varchar(2000); 这里可能容纳不下,可以打点。 DECLARE cid varchar(100); 这里可能太短,导致返回的str太小,可以大点。 DECLARE curr_level integer ; SET str = ''; SET cid = rootId; set curr_level = 1; WHILE (cid is not null ) and ( curr_level <= which_level ) DO SELECT group_concat(id) INTO cid FROM users where FIND_IN_SET(parent_id, cid) > 0; set curr_level = curr_level + 1; SET str = concat(str, ',', cid); END WHILE; RETURN trim( BOTH ',' FROM str ); END
上面程序运行如下:
输入1,1, 结果:4,5,14,15,16,17,18,19,1001,1002,1006,1013,1014
输入1,2 :结果:4,5,14,15,16,17,18,19,1001,1002,1006,1013,1014,7,8
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
2014-09-19 javascript函数劫持
2012-09-19 MySQL索引
2012-09-19 javascript 快捷操作