MySQL儲存過程,樹狀結構資料查詢

2021-09-28 15:02:23 字數 1903 閱讀 5604

1. 根據父級節點id查詢其所有的子級節點id,查詢結果中包含當前傳入的父級節點id值

#根據傳入的父級id查詢所有子節點的id

#tablename 表名

#idkey 節點標識

#pidkey 父節點標識

#pid 父節點id值

#呼叫示例 call get_child_nodes('org','id','pid',213,@result);

create procedure `get_child_nodes`(in `tablename` varchar(100),in `idkey` varchar(50),in `pidkey` varchar(50),in `pid` varchar(100),out `result` varchar(10000))

begin

set result = '';

set @stempchd = pid;

set @sqlcmd = concat('select group_concat(',idkey,') into @stempchd from ',tablename,' where find_in_set(',pidkey,',@stempchd)>0;');

while @stempchd is not null do

if result != '' then

set result = concat(result,',',@stempchd);

else

set result = @stempchd;

end if;

prepare stmt from @sqlcmd;

execute stmt;

end while;

select result;

end————————————————

2. 根據當前節點id查詢其所有的父級節點id,查詢結果中包含當前傳入的節點id值

#根據傳入的節點id查詢所有父節點的id

#tablename 表名

#idkey 節點標識

#pidkey 父節點標識

#id 當前節點id值

#呼叫示例 call get_parent_nodes('org','id','pid',213,@result);

create procedure `get_parent_nodes`(in `tablename` varchar(100),in `idkey` varchar(50),in `pidkey` varchar(50),in `id` varchar(100),out `result` varchar(10000))

begin

set result = '';

set @stemppar = id;

set @sqlcmd = concat('select group_concat(',pidkey,') into @stemppar from ',tablename,' where ',pidkey,'<>',idkey,' and find_in_set(',idkey,',@stemppar)>0;');

#迴圈遞迴

while @stemppar is not null do

#判斷是否是第乙個,不加的話第乙個會為空

if result != '' then

set result = concat(result,',',@stemppar);

else

set result = @stemppar;

end if;

prepare stmt from @sqlcmd;

execute stmt;

end while;

select result;

end

mysql儲存過程 MySQL儲存過程

在本節中,您將逐步學習如何在mysql中編寫和開發儲存過程。首先,我們向您介紹儲存過程的概念,並討論何時使用它。然後,展示如何使用過程 的基本元素,如建立儲存過程的語句,if else,case,loop,儲存過程的引數。下面每個教程都包含了易於理解的示例和詳細的說明。如果您瀏覽並學習所有教程,您可...

mysql 儲存過程 mysql 儲存過程

建立 為建立儲存過程的結束標誌,使用delimiter 可更改標誌 格式create procedure begin sqlend create procedure myprocedure in param integer begin select from tb role where tb rol...

mysql 儲存過程 MySQL儲存過程

目錄 儲存過程 簡介是一組為了完成特定功能的sql語句集合 比傳統sql速度更快 執行效率更高 儲存過程的優點 執行一次後,會將生成的二進位制 駐留緩衝區,提高執行效率 sql語句加上控制語句的集合,靈活性高 在伺服器端儲存,客戶端呼叫時,降低網路負載 可多次重複被呼叫,可隨時修改,不影響客戶端呼叫...