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扩展的途径,其用法与内置函数相同. 自定义函数两个必要条件: 参数:可以有另个或多个 返回值:只能有一个 创建自定 ...
随机推荐
- bootstrab table+表格 select可编辑完整实例
先看下效果图: ============================================================================================ ...
- Http post请求案例
public RmiRespBase sendHttpRes(String jsonParamStr, String url, String apiName,String systemId,Strin ...
- Jquery选择器总结二
简单选择器 1.:firstè选出匹配的元素中的第一个 2.:lastè选出匹配的元素中的最后一个 3.:eq(index)è选出匹配的元素中的指定索引位置的jquery对象(注:index从0开始) ...
- python 搜索匹配文件目录下所有的jpg或者png图片
import glob PATH_TO_TEST_IMAGES_DIR = 'D:\TrainChangeFifteenData\Picture\Test' for pidImage in glob. ...
- 2019-6-23-win10-uwp-未给任务-GenerateAppxPackageRecipe-的必需参数-AppxManifestXml-赋值
title author date CreateTime categories win10 uwp 未给任务 GenerateAppxPackageRecipe 的必需参数 AppxManifestX ...
- Ubuntu18.04 磁盘挂载在某目录下
简介 记录Ubuntu18.04 桌面版系统下实现某个磁盘挂载到自己想要的目录下,内容参考网上教程,此处为自己操作记录. 查看当前所有的磁盘信息 命令:sudo fdisk -l 从列出的信息中可以看 ...
- .NET框架之---MEF托管可扩展框架
MEF简介: 今天学习了下MEF框架,MEF,全称Managed Extensibility Framework(托管可扩展框架).MEF是专门致力于解决扩展性问题的框架,MSDN中对MEF有这样一段 ...
- Git同账号多平台配置
最近工作中使用到了Git,虽然以前学习过,但是已经忘的差不多了,遂将本次配置过程整理成笔记以备忘 生成公钥 ssh-keygen -t rsa -C "gana10007@163.com&q ...
- 集训队日常训练20180518-DIV1
A.3583 n根木棍是否能分成相等两堆. 背包dp,首先求和sum,如果为偶数就说明不行,否则考虑做一个sum/2大小的背包. #include<bits/stdc++.h> using ...
- 洛谷P1621 集合 [2017年6月计划 数论13]
P1621 集合 题目描述 现在给你一些连续的整数,它们是从A到B的整数.一开始每个整数都属于各自的集合,然后你需要进行一下的操作: 每次选择两个属于不同集合的整数,如果这两个整数拥有大于等于P的公共 ...