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 可以根據...