实现mysql树查询的功能
发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,这篇文章给大家分享的是有关实现mysql树查询的功能的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。需求:查找当前(任意)级别下的所有子节点。通过自定义mysql函数实现,先
千家信息网最后更新 2024年09月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安全错误
数据库的锁怎样保障安全
服务器pin是什么
公安部网络安全局认证
把数据库连接到内存卡
mysql 数据库空间
读网络安全选课要求
软件开发一般是几个阶段
dhcp服务器失败
医学金融法律科技it互联网
收费站系统的网络安全包括
优e家设备或服务器未连接到云端
内江网络技术参数
山东绅克斯互联网科技是干嘛的
网络安全设备更新不及时
深圳网络安全保卫
浙江服务器代理商
测试数据库被删了
服务器登录密码管理
乐亭有服务器吗
数据库操作系统先学哪个
做发明还是做软件开发
奉贤区创新软件开发管理系统
无线监控摄像头连不上服务器
rs422 软件开发接口
护苗网络安全课课后总结
网络安全未至屏手抄报
网络安全和信息化领导小组范文
做软件开发费需要什么附件
亚马逊香港服务器ssl加密
测试数据库被删了
浙江物流软件开发工具