实现mysql树查询的功能
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章给大家分享的是有关实现mysql树查询的功能的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。需求:查找当前(任意)级别下的所有子节点。通过自定义mysql函数实现,先
千家信息网最后更新 2026年10月31日实现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安全错误
数据库的锁怎样保障安全
科技赋能下的互联网金融
互联网金融 科技金融
杭州互联网科技公司
深圳天众互联网科技公司
卓越科技互联网 招聘
联恩商钥互联网科技有限公司
北京大学互联网科技怎么样
互联网时代科技改变生活
互联网对科技的发展
厦门比较好的科技互联网公司
互联网还是高科技吗
半导体行业属于互联网高科技类吗
广东鹅鹅鹅互联网科技有限公司
湖北辰鑫科技互联网
长沙渺峰互联网科技有限公司
福仕德教育科技互联网
科技互联网经济论坛
好易买互联网科技
互联网金融金融科技
河南商务圈互联网科技有限公司
狮子座互联网科技有限公司
亿账通互联网科技
互联网实体化科技化
小米互联网科技园设置
互联网科技教育视频
世界互联网科技公司市值排名
互联网科技革命什么开始
上海同邻互联网科技有限公司规模
互联网的黑科技实验室
银川新华互联网科技学校招聘