MySQL中根據父節點查詢其所有子節點

2021-07-12 03:10:07 字數 1006 閱讀 6423

drop function if exists `fun_get_children`;

delimiter ;;

create definer=`root`@`127.0.0.1` function `fun_get_children`(i_id int(32)) returns varchar(20000) charset utf8

deterministic

begin

declare _result varchar(20000);

declare _ids varchar(20000);

set _result = cast(i_id as char);

set _ids = cast(i_id as char);

while _ids is not null do

set _result = concat(_result, ',', _ids);

select group_concat(m.tree_id) into _ids 

from module m where find_in_set(m.parent_id, _ids) > 0;

end while;

return _result;

end;

delimiter ;

--呼叫方式

1. select fun_get_children(1);

2. select * from module where find_in_set(id, fun_get_children(1)); 

ps:1. 沒有deterministic關鍵字會報錯。

2.結果中會有重複值,但作為查詢子條件對最終結果沒有影響。

3.最好為function而不是procedure,如果是後者無法在sql用呼叫方式的兩種方法進行呼叫。

4.如果在查詢語句的where條件中應該用find_in_set(str, strlist)關鍵字,如:where find_in_set(id, fun_get_modules(1))。

mysql根據子節點查詢父級節點

表結構 create table t test id varchar 64 name varchar 64 parentid varchar 64 基礎資料 insert into t test id,name,parentid value 1 一級選單 0 insert into t test i...

根據子節點遞迴查詢所有父節點

有個需求,需要根據給定的子節點向上遞迴查詢所有父節點,網上查詢了一些,但是都不是很滿意,有的是需要用到全域性變數定義儲存列表,但是會有併發問題,然後自己手寫乙個 test void contextloads1 public listgetpid listidlist,integer pid,list...

oracle 根據子節點取出父節點sql

oracle 根據子節點取出父節點sql 1 今天在做專案的時候,有乙個需求,需要根據子節點求出父節點的值.sql語句為 select g.id from t dict g start with g.id in 283 connect by prior g.parent id g.id 上面sql中...