完整function

CREATE  FUNCTION `getChildList`(rootId BIGINT, table_name varchar(20)) RETURNS varchar(21845) CHARSET utf8
BEGIN
DECLARE str VARCHAR(21845) ;
DECLARE cid VARCHAR(21845) ; SET str = '';
SET cid =cast(rootId as CHAR); WHILE cid is not null DO
SET str= concat(str,',',cid);
IF table_name = 'tb_menu' THEN
SELECT group_concat(id) INTO cid from tb_menu where FIND_IN_SET(p_id,cid)>0;
ELSEIF table_name = 'tm_service_category' THEN
SELECT group_concat(pk_id) INTO cid FROM tm_service_category where FIND_IN_SET(p_id,cid)>0;
ELSEIF table_name = 'tm_part_category' THEN
SELECT group_concat(pk_id) INTO cid FROM tm_part_category where is_del = 0 and FIND_IN_SET(p_id,cid)>0;
end IF;
END WHILE;
RETURN str;
END

mysql查询树解析(此处只是简单的循环并非递归):
例如:调用如下

select getChildList(0,tm_service_category)

提炼执行语句

       WHILE cid is not null DO
SET str= concat(str,',',cid);
SELECT group_concat(pk_id) INTO cid FROM tm_service_category where FIND_IN_SET(p_id,cid)>0;
END WHILE;
RETURN str;
END

tm_service_category 表结构如下

CREATE TABLE `tm_service_category` (
`pk_id` bigint(20) unsigned NOT NULL COMMENT '主键',
`name` varchar(50) DEFAULT NULL COMMENT '名称',
`p_id` bigint(20) unsigned DEFAULT NULL COMMENT '父节点',
PRIMARY KEY (`pk_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;

最主要的是p_id字段,表示父节点的pk_id

假设有数据如下

pk_id p_id name
1 0 a
2 1 b
3 1 c
4 2 d

树结构如下:

整棵树的根节点为0,二级节点1,三级节点为2,3,四级节点为4

模拟执行循环语句

       WHILE cid is not null DO
SET str= concat(str,',',cid);
SELECT group_concat(pk_id) INTO cid FROM tm_service_category where FIND_IN_SET(p_id,cid)>0;
END WHILE;
RETURN str;
END getChildList(0,tm_service_category)

1,初始化cid=0
2,查找p_id为0的所有节点拿到所有二级节点赋值给cid,cid=1,str=0,1
3,重复2步操作,查找p_id为1的所有节点拿到所有二级节点赋值给cid,cid=2,3,str=0,1,2,3
4,重复2步操作,查找p_id为2,3的所有节点拿到所有三级节点赋值给cid,cid=4,str=0,1,2,3,4
5,重复2步操作,查找p_id为4的所有节点赋值给cid,没找到任何节点,cid=null,退出循环

mysql循环查询树状数据的更多相关文章

  1. MySQL学习——查询表里的数据

    MySQL学习——查询表里的数据 摘要:本文主要学习了使用DQL语句查询表里数据的方法. 数据查询 语法 select [distinct] 列1 [as '别名1'], ..., 列n [as '别 ...

  2. HDU 4746 莫比乌斯反演+离线查询+树状数组

    题目大意: 一个数字组成一堆素因子的乘积,如果一个数字的素因子个数(同样的素因子也要多次计数)小于等于P,那么就称这个数是P的幸运数 多次询问1<=x<=n,1<=y<=m,P ...

  3. bzoj 3110: [Zjoi2013]K大数查询 树状数组套线段树

    3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 1384  Solved: 629[Submit][Stat ...

  4. MySql频繁查询、插入数据

    当我们需要频繁地从数据库查询.插入数据时,可以将这些数据库操作汇集写到同一个类里,作为工具类直接调用. 将数据库的具体信息保存在.properties文件中,用log4j作为日志记录 MySql.ja ...

  5. BZOJ1878: [SDOI2009]HH的项链 (离线查询+树状数组)

    1878: [SDOI2009]HH的项链 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1878 Description: HH有一串由 ...

  6. ACdream 1127 Base Station (离线查询+树状数组)

    题目链接: http://acdream.info/problem?pid=1127 题目: 移动通信系统中,通信网的建立主要通过基站来完成. 基站可以分为主基站和子基站.子基站和各个移动用户进行连接 ...

  7. 树状数据删除(TP5)

    应用场景:类似上图中树状菜单,选中一级菜单 点击上方删除按钮 所有子菜单删除 以下是代码截图(代码基于 TP5)

  8. python连接mysql循环插入千万条数据脚本

    之前都是在mysql的存储过程中插入数据,毕竟mysql语法函数有限,很多都有限制.突然想到学了python正好可以练练手.首先需要安装pymysql模块包(模块包安装请自行百度) pip insta ...

  9. mysql中递归树状结构<转>

    在Oracle 中我们知道有一个 Hierarchical Queries 通过CONNECT BY 我们可以方便的查了所有当前节点下的所有子节点.但很遗憾,在MySQL的目前版本中还没有对应的功能. ...

随机推荐

  1. 由JS函数返回值引发的一场”血案"

    ---恢复内容开始--- 啊...  本来昨天晚上想写来着,结果陪老婆看电视剧就忘了... 呢滴神啊,原谅我吧. 背景:昨天在项目中做一个小功能的时候,出现了个小问题,而且一开始找了半天也没找到原因. ...

  2. 170608、Spring 事物机制总结

    spring两种事物处理机制,一是声明式事物,二是编程式事物 声明式事物 1)Spring的声明式事务管理在底层是建立在AOP的基础之上的.其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加 ...

  3. HotSpot VM

    1.4.2 Sun HotSpot VM_深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)_红黑联盟读书频道 http://book.2cto.com/201306/25434.html 提 ...

  4. talib 中文文档(九):Volume Indicators 成交量指标

    Volume Indicators 成交量指标 AD - Chaikin A/D Line 量价指标 函数名:AD 名称:Chaikin A/D Line 累积/派发线(Accumulation/Di ...

  5. Team Formation---zoj3870(异或)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5518 题意就是有n个数,如果满足a^b > MAX(a, b) ...

  6. Treasure Exploration---poj2594(传递闭包Floyd+最小路径覆盖)

    题目链接:http://poj.org/problem?id=2594 在外星上有n个点需要机器人去探险,有m条单向路径.问至少需要几个机器人才能遍历完所有的点,一个点可以被多个机器人经过(这就是和单 ...

  7. Python开发【笔记】:探索Python F-strings

    F-strings 在python3.6.2版本中,PEP 498 提出一种新型字符串格式化机制,被称为“字符串插值”或者更常见的一种称呼是F-strings(主要因为这种字符串的第一个字母是f) 简 ...

  8. Python知识总汇

    一.python基础 python基础 python编码问题 逻辑运算 二.python数据类型 二.python数据类型 三.IO(文件处理) 三.IO(文件处理) 四.函数 函数基础 名称空间与作 ...

  9. top与with ties用法

    使用top中把与最后一条记录值相同的数据也放入列表中 一.SQL SERVER中使用WITH TIES的用途 with ties一般是和Top , order by相结合使用的,会查询出最后一条数据额 ...

  10. Struts2表单数据接收方式

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/sunshoupo211/article/details/30249239 1.将Action类作 ...