MySQL遍歷上級組織並給組織向上排序

2021-10-04 03:01:22 字數 1667 閱讀 9675

業務 場景:

表中存有上級組織 字段,組織負責人字段,現需返回當前組織負責人及其所有上級組織的負責人,  並以當前組織排序為1,上級組織排序為2,以此類推。

實現方法如下:

drop procedure if exists pt_structure_getprincipal;

create procedure pt_structure_getprincipal(

v_stru_id varchar(80) -- 組織id

)sql security invoker

begin

declare lev int;

set lev=1;

-- 建立結果臨時表

drop table if exists temp_pt_structure;

create table temp_pt_structure(

stru_id varchar(36),

org_name varchar(100),

parent_stru_id varchar(36),

principal_staff_id varchar(36),

lev int

) engine=memory;

insert into temp_pt_structure(stru_id,org_name,parent_stru_id,principal_staff_id,lev)

select stru_id,org_alias,parent_stru_id,principal_staff_id,0

from pt_structure

where stru_id=v_stru_id;

insert into temp_pt_structure(stru_id,org_name,parent_stru_id,principal_staff_id,lev)

select ps.stru_id,ps.org_alias,ps.parent_stru_id,ps.principal_staff_id,1

from pt_structure ps

join temp_pt_structure tps on ps.stru_id=tps.parent_stru_id;

-- 遍歷上級組織

while row_count()>0

do set lev=lev+1;

insert into temp_pt_structure(stru_id,org_name,parent_stru_id,principal_staff_id,lev)

select ps.stru_id,ps.org_alias,ps.parent_stru_id,ps.principal_staff_id,lev

from pt_structure ps

join temp_pt_structure tps on ps.stru_id=tps.parent_stru_id and tps.lev=lev-1;

end while;

select principal_staff_id,(@rownum:=@rownum+1) num from temp_pt_structure join (select @rownum:=0) t;

drop table temp_pt_structure;

end;

mysql名 組織 mysql組織結構

1.資料的組織結構 1 層次型 2 網狀型 3 關係型 2.mysql軟體包格式 1 軟體包管理器特有的格式 rpm包 2 通用二進位製包 解壓玩就能用 3 源程式 原始碼包 3.mysql是c s架構 客戶端 mysql 要安裝的包 mysql 服務端 mysqld 要安裝的包 mysql ser...

mysql堆表和索引組織 堆表與索引組織表

堆表 資料存放在資料裡面,索引存放在索引裡 堆就是無序資料的集合,索引就是將資料變得有序,在索引中鍵值有序,資料還是無序的 堆表中,主鍵索引和普通索引一樣的,葉子節點存放的是指向堆表中資料的指標 可以是乙個頁編號加偏移量 指向實體地址,沒有回表的說法 堆表中,主鍵和普通索引基本上沒區別,和非空的唯一...

mysql 組織層級查詢 mysql 層級結構查詢

描述 最近遇到了乙個問題,在mysql中如何完成節點下的所有節點或節點上的所有父節點的查詢?在oracle中我們知道有乙個hierarchical queries可以通過connect by來查詢,但是,在mysql中還沒有對應的函式 下面給出乙個function來完成的方法 下面是sql指令碼,想...