MYSQL樹狀查詢

2021-08-31 17:15:07 字數 1532 閱讀 9278

oracle中可以採用connect by 來進行樹狀查詢,在mysql中卻沒有提供該功能,但是,使用存貯過程我們也可以實現該查詢。

建立一張表 fd_id varchar(50)--主鍵,fd_name varchar(50),fd_parentid varchar(20);

建立存貯過程:

drop procedure if exists   findlchild;

/* iid 遞迴父節點 , layer 允許遞迴深度 */

create procedure findlchild(iid varchar(50),layer bigint(20))

begin

/*建立接受查詢的臨時表 */

create temporary table if not exists tmp_table(id varchar(50),name varchar(50)) engine=innodb default charset=utf8;

/*最高允許遞迴數*/

set @@max_sp_recursion_depth = 10 ;

call iterative(iid,layer);/*核心資料收集*/

select * from tmp_table ;/* 展現 */

drop temporary table if exists tmp_table ;/*刪除臨時表*/

end;

drop procedure if exists iterative ;

create procedure iterative(iid varchar(50),layer bigint(20))

begin

declare tid varchar(50) default iid ;

declare tname varchar(50) character set utf8;

/* 游標定義 */

declare cur1 cursor for select fd_id,fd_name from sys_org_element where fd_parentid=iid ;

declare continue handler for sqlstate '02000' set tid = null;

/* 允許遞迴深度 */

if layer>0 then

open cur1 ;

fetch cur1 into tid,tname ;

while ( tid is not null )

do/* 核心資料收集 */

insert into tmp_table values(tid,tname);

call iterative(tid,layer-1);

fetch cur1 into tid,tname ;

end while;

end if;

end;

呼叫存貯過程:call findlchild('12d8385f65a85c497d232ef4294ac737',5);

結果

MYSQL樹狀查詢

oracle中可以採用connect by 來進行樹狀查詢,在mysql中卻沒有提供該功能,但是,使用存貯過程我們也可以實現該查詢。建立一張表 fd id varchar 50 主鍵,fd name varchar 50 fd parentid varchar 20 建立存貯過程 drop proc...

Oracle 樹狀查詢

筱公尺加步槍 posted 2010年8月18日 23 01 in 資料庫 with tags oracle 樹狀,950 閱讀 在實際應用中,經常利用資料庫儲存樹狀結構的資料,通常用一張表中的兩個字段表示,乙個是自身的id,乙個是儲存父類的id。在這樣具有這種關係中的資料,要求查出的資料具有我們想...

樹狀遞迴查詢

樹狀等級查詢 所有資料 從mysql裡面輸出的全部是字串型別 list array array cat id 8 cat name 分類fff sort order 30 parent id 1 array cat id 1 cat name 分類aaa sort order 50 parent i...