#存储文本信息表
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 写递归查询子节点的更多相关文章

  1. MySQL递归查询父节点或递归查询子节点-陈远波

    根据id查询父节点,具体需要修改的地方笔者已在注释中给大家作了注解 DELIMITER $$ USE `yjlc_platform`$$ -- getCompanyParent 为函数名 DROP F ...

  2. oracle递归查询子节点

    通过子节点向根节点追朔. select * from persons.dept start with deptid=76 connect by prior paredeptid=deptid 通过根节 ...

  3. 【mmall】递归查询子节点并排重

    代码 @Override public ServerResponse getSelfAndChildrenCategory(Integer categoryId) { if (categoryId ! ...

  4. MySQL递归查询树状表的子节点、父节点具体实现

    mysql版本(5.5.6等等)尚未支持循环递归查询,和sqlserver.oracle相比,mysql难于在树状表中层层遍历的子节点.本程序重点参考了下面的资料,写了两个sql存储过程,子节点查询算 ...

  5. 包含mysql 递归查询父节点 和子节点

    包含mysql 递归查询父节点 和子节点 mysql递归查询,查父集合,查子集合 查子集合 --drop FUNCTION `getChildList` CREATE FUNCTION `getChi ...

  6. MySQL递归查询树状表的子节点、父节点

    表结构和表数据就不公示了,查询的表user_role,主键是id,每条记录有parentid字段; 如下mysql查询函数即可实现根据一个节点查询所有的子节点,根据一个子节点查询所有的父节点.对于数据 ...

  7. MySQL 自定义函数CREATE FUNCTION实例

    分享一个MySQL 自定义函数CREATE FUNCTION的实例.mysql> delimiter $$mysql> CREATE FUNCTION myFunction-> (i ...

  8. mysql 自定义函数

    原文:http://www.cnblogs.com/zhangminghui/p/4113160.html 引言 MySQL本身提供了内置函数,这些函数的存在给我们日常的开发和数据操作带来了很大的便利 ...

  9. MySQL自定义函数

    用户自定义函数(user-defined function,UDF)是一种对MySQL扩展的途径,其用法与内置函数相同. 自定义函数两个必要条件: 参数:可以有另个或多个 返回值:只能有一个 创建自定 ...

随机推荐

  1. Django项目:CRM(客户关系管理系统)--64--54PerfectCRM实现CRM客户报名链接

    # kingadmin.py # ————————04PerfectCRM实现King_admin注册功能———————— from crm import models #print("ki ...

  2. [转载] DDK中VPORT Mini-Driver的使用说明

    学习下. 原文地址:DDK中VPORT Mini-Driver的使用说明作者:跳皮筋的小老鼠 要使用TI DDK中实现的VPORT驱动程序,首先需要在程序中提供VPORT_PortParams类型的参 ...

  3. IO流18 --- RandomAccessFile实现数据的读写操作 --- 技术搬运工(尚硅谷)

    RandomAccessFile实例化时,需要设置读写模式 示例:复制文件 @Test public void test16() throws IOException { RandomAccessFi ...

  4. python多进程,进程池,数据共享,进程通信,分布式进程

    一.操作系统中相关进程的知识   Unix/Linux操作系统提供了一个fork()系统调用,它非常特殊.普通的函数调用,调用一次,返回一次,但是fork()调用一次,返回两次,因为操作系统自动把当前 ...

  5. 关于开启Eureka安全Security认证后,客户端死活注册不上的问题

    遇到一个问题"开启Eureka服务端的安全认证后,客户端死活注册不到Eureka上",已经尝试了以下办法,完全搞不定... 客户端出错的版本: spring-boot:2.0.3. ...

  6. 安装springsource-tool-suite插件成功之后找不到spring的处理办法

    最近学习spring,安装springsource-tool-suite插件,成功之后,在help-installation details里面可以找到安装的spring插件,却在window-pre ...

  7. 查看cpu性能和磁盘空间

    df -h查看当前磁盘空间 du -sh查看当前目录占用的磁盘空间 du -sh * 查看当前所有目录占用的磁盘空间   lscpu查看cpu信息 free查看空间总量

  8. 彻底理解setTimeout()

    之前在网上看了很多关于setTimeout的文章,但我感觉都只是点到为止,并没有较深入的去剖析,也可能是我脑袋瓜笨,不容易被点解.后面看了<你不知道的javascript-上卷>一书,决定 ...

  9. 在vue项目中正确的引入jquery

    最近学习vue,习惯性的通过<script>标签引入jquery,写完后报错才想起来,这种方式在vue是不适用的. 1:因为已经安装了vue脚手架,所以需要在webpack中全局引入jqu ...

  10. 一个网页登陆界面写30多个测试Case——测试之道

    转自博文:http://www.cnblogs.com/I-am-Betty/p/3566411.html 具体需求: 有一个登陆页面, (假如上面有2个textbox, 一个提交按钮. 请针对这个页 ...