Mysql 遞迴查詢子節點

2021-10-24 12:20:54 字數 1083 閱讀 8789

#查詢父編碼及以下所有子節點

select id from (

select t1.id,t1.parent_id,if (find_in_set(t1.id,@pids)

> 0,@pids,if (find_in_set(t1.parent_id,@pids)

> 0,@pids :=concat_ws(

',',@pids,id),'0'

)) as ischild,@pids from (

select t.id,t.parent_id from hr_organization t where t.status=1 order by parent_id,id) t1,(

select @pids :=

'yzc0035'

) t2) t3 where ischild !=

'0';

#查詢子節點

select id from (

select t1.id,t1.parent_id, if (find_in_set(t1.parent_id,@pids)

> 0,@pids :=concat_ws(

',',@pids,id),'0'

) as ischild,@pids from (

select t.id,t.parent_id from hr_organization t where t.status=1 order by parent_id,id) t1,(

select @pids :=

'yzc0035'

) t2) t3 where ischild !=

'0';

@pids :=『yzc0035』 定義變數,賦值要查詢的父編碼

@pids 取值

find_in_set(『查詢的字段』,『以逗號分隔字串』) select find_in_set(『2』,『1,2』);返回2 不存在返回0

if(express1,express2,express3)條件語句,if語句類似三目運算子,當exprss1成立時,執行express2,否則執行express3

concat_ws 合併字段定義以分隔符

MySQL 遞迴查詢 當前節點及子節點

1.表結構 2.查詢語句 create procedure pro getunderorg inidd varchar 36 begin declare lev int setlev 1 drop table ifexists tmp1 create table tmp1 id varchar 36...

mysql 遞迴查詢選單節點的所有子節點

背景 專案中遇到乙個需求,要求查處選單節點的所有節點,在網上查了一下,大多數的方法用到了儲存過程,由於線上環境不能隨便新增儲存過程,因此在這裡採用類似遞迴的方法對選單的所有子節點進行查詢。準備 建立menu表 create table menu id int 11 not null auto inc...

mysql 遞迴查詢選單節點的所有子節點

建立menu表 create table menu id int 11 not null auto increment comment 選單id parent id int 11 default null comment 父節點id menu name varchar 128 default nul...