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、总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论