mysql实现向下递归与向上递归方式
更新时间:2026年04月17日 10:04:47 作者:搬砖的梦先生
本文介绍了FIND_IN_SET函数的使用,可以替代SQL的IN查询多个节点数据,也可通过=关联查询单个节点,此外,还提到了向下和向上递归查询的方法
1、表描述
FIND_IN_SET:类似sql的in查询查询多个节点的数据,这个函数可以换成=号进行关联,=关联时只能查询一个节点的数据,
表名称: T_table
| 名称 | 描述 |
|---|---|
| code | 数据标识 |
| pCode | 数据父标识 |
2、向下递归查询
SELECT T3.*
-- 层级需要
-- ,T2.level_
FROM(
SELECT @code as _code,
(SELECT @code := GROUP_CONCAT(code)
FROM T_table
WHERE FIND_IN_SET(pCode, @code)
) as T1
-- 层级需要
-- ,@level := @level+1 as level_
FROM T_table,
(SELECT @code := 'code1,code2,...'
-- 层级需要
-- ,@level := -1
) T4
WHERE @code IS NOT NULL
) T2, T_table T3
WHERE FIND_IN_SET(T3.code, T2._code)
-- 不包含自身
-- AND !FIND_IN_SET(T3.code,'code1,code2,...')
3、向上递归查询
SELECT T3.*
-- 层级需要
-- ,T2.level_
FROM(
SELECT @code as _code,
(SELECT @code := GROUP_CONCAT(pCode)
FROM T_table
WHERE FIND_IN_SET(code,@code)
) as T1
-- 层级需要
-- ,@level := @level+1 as level_
FROM T_table,
(SELECT @code := 'code1,code2,...'
-- 层级需要
-- ,@level := -1
) T4
WHERE @code IS NOT NULL
) T2, T_table T3
WHERE FIND_IN_SET(T3.code, T2._code)
-- 不包含自身
-- AND !FIND_IN_SET(T3.code,'code1,code2,...')
4、总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
MySQL从5.7升级到8.0的完整操作流程(小白也能看懂)
MySQL 8.0 相比 5.7 引入了很多新特性和改进,但直接升级存在一定风险,所以本篇博客详细介绍如何安全地升级数据库,让你在宝塔环境下顺利完成操作,需要的朋友可以参考下2025-10-10
mysql installer community 5.7.16安装详细教程
这篇文章主要为大家介绍了mysql installer community 5.7.16安装详细教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2018-09-09
MySql查询某个时间段内的数据实例(前一周、前三个月、前一年等)
在实际工作中需要整理一份时间在规定时间前后的统计表,下面这篇文章主要给大家介绍了关于MySql查询某个时间段内的数据的相关资料,包括前一周、前三个月、前一年等,需要的朋友可以参考下2022-10-10


最新评论