实现mysql树查询的功能
发表于:2024-11-25 作者:千家信息网编辑
千家信息网最后更新 2024年11月25日,这篇文章给大家分享的是有关实现mysql树查询的功能的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。需求:查找当前(任意)级别下的所有子节点。通过自定义mysql函数实现,先
千家信息网最后更新 2024年11月25日实现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安全错误
数据库的锁怎样保障安全
数据库 模式的概念
崇明区口碑好的软件开发不二之选
大连工控软件开发公司
数据库实例启动
网络安全策略毕业设计
计算机网络技术三级总结
软件开发服务质量标准是什么
找到指定主机名的服务器
幼师网络技术
幼儿园网络安全检测记录
北京智能软件开发中心
护理软件开发的第一个步骤
电气里面的管理服务器
静态网站网络安全方面
我的世界角色卡在服务器里
网络安全问题这几年有减弱趋势
网络安全民警进社区
永劫无间无法链接到内容服务器
北方银证软件开发有限公司
静安区营销软件开发代理品牌
检测服务器带宽
瑞幸咖啡服务器崩溃视频
我国数据库发展我们能做什么
医疗行业 软件开发
广西数据库日志审计
oracle 数据库清理
数据库口令
网络安全责任有哪几种
暗黑3老版数据库
中国烟草需要网络安全吗