25行完成mysql树查询代码详解【MySQL教程】,mysql,详解,代码
作者:搜教程发布时间:2019-12-01分类:MySQL教程浏览:45评论:0
导读:本文主要和人人分享25行完成mysql树查询代码详解,希望能协助到人人。需求:查找当前(恣意)级别下的一切子节点。经由过程自定义mysql函数完成,先贴代码,背面给出细...
本文主要和人人分享25行完成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)
相干引荐:
SQL语句完成子孙树查询典范实例
mysql-运用MYSQL完成oracle start with connect by递归树查询
Oracle树查询及相干函数
以上就是25行完成mysql树查询代码详解的细致内容,更多请关注ki4网别的相干文章!
相关推荐
- 如何修改mysql的默认时区_MySQL教程,mysql,时区
- mysql数据库如何创建数据表_MySQL教程,mysql,数据表
- linux源码安装mysql5.7_MySQL教程,linux,mysql,mysql5.7
- mysql外键约束怎么写_MySQL教程,mysql,外键约束
- mysql如何设置字符集为UTF8_MySQL教程,mysql,UTF8,字符集
- mysql怎么创建数据库_MySQL教程,mysql,数据库
- 如何查看mysql的日志文件_MySQL教程,mysql,日志文件
- mysql如何删除表中一行数据?_MySQL教程,mysql
- access是数据库管理系统吗_MySQL教程,access,mysql
- mysql修改字段类型有哪些?_MySQL教程,mysql,修改字段
你 发表评论:
欢迎- MySQL教程排行
-
- 1Mysql如何挂盘_MySQL教程,Mysql
- 2mysql中key 、primary key 、unique key 与index区别详解_MySQL教程,mysql
- 3关于一道mysql查询面试题的思考解决过程_MySQL教程,mysql
- 4关于linux下mysql去除严格模式_MySQL教程,linux
- 5分离数据库和附加数据库的区别_MySQL教程,数据库
- 6如何修改mysql的默认时区_MySQL教程,mysql,时区
- 7利用mysql生成唯一序号_MySQL教程,mysql
- 8看看MySQL 5.6, 5.7, 8.0的新特性!_MySQL教程,MySQL
- 9mysql数据库如何创建数据表_MySQL教程,mysql,数据表
- 最新文章
- 广而告之