mysql自定义function 写递归查询子节点
#存储文本信息表
CREATE TABLE WordInfoEntity(
word_id VARCHAR(32) PRIMARY KEY NOT NULL, # 主键ID UUID
word_greda INT NOT NULL, #等级: 0:正文文本 1,2,3,4 等级
word_name VARCHAR(100) NOT NULL, #标题名
word_content VARCHAR(20000), #内容:标题名+正文文本
word_parentId VARCHAR(32) NOT NULL #父级id (UUid)
);
查子集合:向下递归(亲测能用)
#自定义递归函数,用于查询传入id的所有子id
DELIMITER // # “//” 默认开头,必须以“//” 结尾
CREATE FUNCTION `getChildLst`(rootId VARCHAR(32)) #设置function参数类型
RETURNS VARCHAR(1000) READS SQL DATA #定义返回的数据类型
BEGIN #开始
DECLARE sTemp VARCHAR(1000); #定义全局变量,查询出来的id进行拼接
DECLARE sTempChd VARCHAR(1000); #临时变量,用于循环查询的单次接收
SET sTemp = '$'; # 设置初始值 SET sTempChd =CAST(rootId AS CHAR); #赋值,进行查询你
#SET sTempChd =rootId ; #赋值,进行查询你 WHILE sTempChd IS NOT NULL DO #此处为循环 为null结束循环
SET sTemp = CONCAT(sTemp,',',sTempChd); #将查询的所有子节点赋值为全局
#GROUP_CONCAT(word_id) : 将查询出来的结果用逗号连接在一起
# FIND_IN_SET(word_parentId,sTempChd) 效果 == word_parentId in (1,2,3,4....) #select * from treenodes where FIND_IN_SET(id,'1,2,3,4,5');
#使用find_in_set函数一次返回多条记录
#id 是一个表的字段 然后每条记录分别是id等于1,2,3,4,5的时候
#有点类似in (集合)
#select * from treenodes where id in (1,2,3,4,5);
SELECT GROUP_CONCAT(word_id) INTO sTempChd FROM WordInfoEntity WHERE FIND_IN_SET(word_parentId,sTempChd); #将查询出来的子id, 再次将子id当作父id进行查询
END WHILE;
RETURN sTemp; #将最后结果返回出去
END // # 结束,必须以“//” 结束
DELIMITER ;
查询语句:
#传入父级id查询所有子级信息(function递归查询)
SELECT * FROM WordInfoEntity WHERE FIND_IN_SET(word_id, getChildLst('eeee'));
查父集合:向上递归(未亲测,未知是否能用)
--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('');
select * from sbkfwh where FIND_IN_SET(id,getParentList(''))
mysql自定义function 写递归查询子节点的更多相关文章
- MySQL递归查询父节点或递归查询子节点-陈远波
根据id查询父节点,具体需要修改的地方笔者已在注释中给大家作了注解 DELIMITER $$ USE `yjlc_platform`$$ -- getCompanyParent 为函数名 DROP F ...
- oracle递归查询子节点
通过子节点向根节点追朔. select * from persons.dept start with deptid=76 connect by prior paredeptid=deptid 通过根节 ...
- 【mmall】递归查询子节点并排重
代码 @Override public ServerResponse getSelfAndChildrenCategory(Integer categoryId) { if (categoryId ! ...
- MySQL递归查询树状表的子节点、父节点具体实现
mysql版本(5.5.6等等)尚未支持循环递归查询,和sqlserver.oracle相比,mysql难于在树状表中层层遍历的子节点.本程序重点参考了下面的资料,写了两个sql存储过程,子节点查询算 ...
- 包含mysql 递归查询父节点 和子节点
包含mysql 递归查询父节点 和子节点 mysql递归查询,查父集合,查子集合 查子集合 --drop FUNCTION `getChildList` CREATE FUNCTION `getChi ...
- MySQL递归查询树状表的子节点、父节点
表结构和表数据就不公示了,查询的表user_role,主键是id,每条记录有parentid字段; 如下mysql查询函数即可实现根据一个节点查询所有的子节点,根据一个子节点查询所有的父节点.对于数据 ...
- MySQL 自定义函数CREATE FUNCTION实例
分享一个MySQL 自定义函数CREATE FUNCTION的实例.mysql> delimiter $$mysql> CREATE FUNCTION myFunction-> (i ...
- mysql 自定义函数
原文:http://www.cnblogs.com/zhangminghui/p/4113160.html 引言 MySQL本身提供了内置函数,这些函数的存在给我们日常的开发和数据操作带来了很大的便利 ...
- MySQL自定义函数
用户自定义函数(user-defined function,UDF)是一种对MySQL扩展的途径,其用法与内置函数相同. 自定义函数两个必要条件: 参数:可以有另个或多个 返回值:只能有一个 创建自定 ...
随机推荐
- Django项目:CMDB(服务器硬件资产自动采集系统)--09--06CMDB测试Linux系统采集硬件数据的命令04
root 123456 ip addr init 0 root 123456 ip addr root 123456 python3 yum -y install zlib-devel bzip2-d ...
- VitualBox虚拟机安装CentOS, shell模式与图形化界面的相互切换
方法一:永久切换 # vi /etc/inittab 编辑 init 5 为 init 3,重启就自动进入控制台方式:反之桌面模式 方法二:当前有效 桌面模式切换shell模式:Ctrl + Alt ...
- 【agc013d】AtCoder Grand Contest 013 D - Piling Up
题意 盒子里有n块砖,每块的颜色可能为蓝色或红色. 执行m次三步操作: 1.从盒子里随便拿走一块砖 2.放入一块蓝砖和红砖到盒子里 3.从盒子里随便拿走一块砖 给定n,m 问拿出来的砖,可能有多少种不 ...
- 给NetBeans配置javafx环境
JavaFX开发环境安装配置,这里给大家介绍一个非常有用的步骤 从Java8开始,JDK(Java开发工具包)包括了JavaFX库. 因此,要运行JavaFX应用程序,您只需要在系统中安装Java8或 ...
- 过滤html标签的一个函数
str_replace(array(' ', '&', '"', ''', '“', '”', '—', '<', '>', '·', '…', '&'), ar ...
- Redis源码解析:12AOF持久化
除了RDB持久化功能之外,Redis还提供了AOF(AppendOnly File)持久化功能.与RDB持久化通过保存数据库中的键值对来记录数据库状态不同,AOF持久化是通过保存Redis服务器所执行 ...
- 【html、CSS、javascript-13】前端框架Bootstrap
1.Bootstrap前端框架:包含css样式.js插件.图标等 http://www.bootcss.com/ 2.Font Awesome:非常全的图标大全 https://fontawesome ...
- 在网站制作过程中发现的block和inline-block不同。
inline-block,简单来说就是在CSS中通过display:inline-block对一个对象指定inline-block属性,可以将对象呈递为内联对象,但是对象的内容作为块对象呈递.有时既希 ...
- 做网站-Http状态码详解
https://mp.weixin.qq.com/s/ZcYG59yLsLCNY2-2k4YqwA HTTP状态码(HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码 ...
- 直接在安装了redis的Linux机器上操作redis数据存储类型--对key的操作
一.概述: 前几篇博客中,主要讲述的是与Redis数据类型相关的命令,如String.List.Set.Hashes和Sorted-Set.这些命令都具有一个共同点,即所有的操作都是针对与Key关 ...