mysql 函式實現父子查詢

2021-08-14 19:22:28 字數 2175 閱讀 5547

1、根據 子節點查詢父節點(返回的是id鏈)

-- 建立mysql自定義函式,

-- 新建mysql函式必須通過mysql commond line鍵入命令列的方式進行建立,而不能通過第三方提供的圖形化資料庫操作軟體來建立;

-- 使用命令列 

-- 定義函式獲取當前序列值

c:\users\user1> mysql -u root -p  回車

enter password: 輸入密碼 進入mysql命令列

mysql> use 資料庫名 (切換資料庫)

mysql> delimiter $$

mysql> drop function if exists getparentlist;  

mysql> create function `getparentlist`(rootid char(32))

returns text

begin

declare parenttemp text;

declare parentlist text; 

set parenttemp =cast(rootid as char);

#迴圈遞迴

while parenttemp is not null do 

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

if (parentlist is not null) then

set global group_concat_max_len = 102400;

set parentlist = concat(parentlist,',',parenttemp);

else

set parentlist = parenttemp;

end if;

set parentlist = concat(parentlist,',',parentlist); 

select group_concat(parent_id) into parenttemp from t_organization where find_in_set(id,parenttemp)>0; 

end while; 

return parentlist; 

end$$

mysql>  delimiter ;

-- 使用函式

select * from t_organization where find_in_set(id,getparentlist('1223580987654'));   --  效率較低 每次都呼叫函式

select * from t_code , (select queryparentcodekeybyid("e9e2774adc244d458c7171d3f9b799e4") pids ) t where find_in_set(id,pids); -- 效率較高

2、根據父節點id遞迴查詢所有子節點資訊

create definer=`root`@`%` function `queryresourcebyparentid`(rootid char(32)) returns text charset utf8

begin 

declare childlist text;

declare childtemp text;

declare i int;

set i=0;

set childtemp = cast(rootid as char);

while childtemp is not null do 

if(childlist is not null) then 

set global group_concat_max_len = 102400;

set childlist = concat(childlist,',',childtemp) ;

else 

if (i!=0) then

set childlist = concat(childtemp) ;

else

set i=i+1;

end if; 

end if; 

select group_concat(id) into childtemp from t_resources t_o where find_in_set(parent_id,childtemp)>0;

end while; 

return childlist;

end

mysql實現父子遞迴查詢sql

在很多業務場景中,我們需要從資料庫查詢一些樹狀結構的資料,多半以id,pid的形式儲存記錄。在oracle中,能夠通過語法輕鬆實現父子級間的遞迴查詢,無論到父,子,孫,曾孫等多少級,都能查出來。但是在mysql中,就沒有像oracle中那樣有現成的語法直接呼叫了。設表test有以下字段 id,nam...

MySQL遞迴查詢父子節點

create table folder id bigint 20 not null,parent id bigint 20 default null,primary key id 建立函式 create function getparlist rootid bigint returns varcha...

Mysql中的遞迴層次查詢(父子查詢)

在mysql中如何完成節點下的所有節點或節點上的所有父節點的查詢?在oracle中我們知道有乙個hierarchical queries可以通過connect by來查詢,但是,在mysql中還沒有對應的函式 下面是sql指令碼,想要執行的直接賦值貼上進資料庫即可。建立表treenodes 可以根據...