实现mysql树查询的功能
发表于:2024-10-22 作者:千家信息网编辑
千家信息网最后更新 2024年10月22日,这篇文章给大家分享的是有关实现mysql树查询的功能的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。需求:查找当前(任意)级别下的所有子节点。通过自定义mysql函数实现,先
千家信息网最后更新 2024年10月22日实现mysql树查询的功能
这篇文章给大家分享的是有关实现mysql树查询的功能的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。
需求:查找当前(任意)级别下的所有子节点。
通过自定义mysql函数实现,先贴代码,后面给出详细说明:
delimiter $$CREATE FUNCTION `getChildList`(rootId INT)RETURNS varchar(1024)BEGIN DECLARE childListStr VARCHAR(1024); DECLARE tempChildStr VARCHAR(1024); DECLARE rootIdStr VARCHAR(64); SET childListStr=NULL; SET rootIdStr=cast(rootId as CHAR); myloop: WHILE TRUE DO SELECT GROUP_CONCAT(id) INTO tempChildStr FROM test where FIND_IN_SET(parrent_id,rootIdStr)>0; IF tempChildStr IS NOT NULL THEN SET rootIdStr=tempChildStr; IF childListStr IS NULL THEN SET childListStr=tempChildStr; ELSE SET childListStr=concat(childListStr,',',tempChildStr); END IF; ELSE LEAVE myloop; END IF; END WHILE; RETURN childListStr;END $$
建表sql:
CREATE TABLE `test` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `parrent_id` int(11) DEFAULT '0', `name` varchar(32) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;+------------+------------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+------------+------------------+------+-----+---------+----------------+| id | int(11) unsigned | NO | PRI | NULL | auto_increment || parrent_id | int(11) | YES | | 0 | || name | varchar(32) | YES | | NULL | |+------------+------------------+------+-----+---------+----------------++----+------------+------+| id | parrent_id | name |+----+------------+------+| 1 | 0 | cg1 || 2 | 1 | cg2 || 3 | 2 | cg3 || 4 | 3 | cg4 || 5 | 4 | cg5 || 6 | 5 | cg6 || 7 | 6 | cg7 || 8 | 7 | cg8 || 9 | 8 | cg9 || 10 | 1 | cg10 || 11 | 2 | cg11 |+----+------------+------+
第1行:
delimiter编写函数体内容的时候,需要使用 DELIMITER 关键字将分隔符先修改为别的,否则编写语句的时候写到 ';' 的时候会直接执行,导致函数编写失败
2-4行:mysql函数语法规范,不多解释
5-9行:定义逻辑所需变量。
childListStr:最终返回的子节点ids_str(例如:"1,2,3,4,5")。
tempChildStr: 临时子节点ids_str(例如:"1")。
rootIdStr: 输入根节点转换为char类型。
10-23行: 整个函数最关键的地方在while里面对tempChildStr的处理,以及对 内置函数GROUP_CONCAT和FIND_IN_SET的理解
每一次循环,通过 GROUP_CONCAT函数找出输入的根节点的直接下级节点,通过GROUP_CONCAT函数得到这些子节点的id组成的字符串。并将这次得到的子字符串作为根节点,去寻找下一级的所有的子节点。最后找到最后子节点没有下级时候,tempChildStr IS NOT NULL。退出循环,返回结果。
运行结果:
mysql> select getChildList(1);+-----------------------+| getChildList(1) |+-----------------------+| 2,10,3,11,4,5,6,7,8,9 |+-----------------------+1 row in set (0.00 sec)mysql> select getChildList(2);+------------------+| getChildList(2) |+------------------+| 3,11,4,5,6,7,8,9 |+------------------+1 row in set (0.00 sec)
感谢各位的阅读!关于实现mysql树查询的功能就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到吧!
节点
函数
时候
内容
功能
查询
下级
关键
字符
字符串
更多
结果
循环
输入
不错
实用
代码
关键字
分隔符
变量
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
三星手机代理服务器设置
杭州边奇网络技术
csgo魔兽服务器
r220服务器指示灯
徐州软件开发外包公司吗
sql数据库没有了怎么办
学校网络安全 宣传讲话
数据库自动存取控制
网络安全环境实行的政策
交通运输网络安全培训
阿凡提软件开发
沈阳软件开发制作
充值服务器吗
软件开发的功能清单
软件开发就业心得
潮州软件开发系统
lora网关做服务器
专业服务器报价模板
pg数据库的表删不掉
泰坦陨落2无法连接服务器失败
帝国如何还原数据库
服务器收到短信
mysql数据库1452
第七届网络安全宣传江西省
工控网络安全口号
华为鸿蒙系统软件开发
芜湖软件开发app需要多少钱
大学生思政教育网络安全
大数据时代计算机网络安全
cf挑战强化服务器