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

2021-10-17 17:45:46 字數 3107 閱讀 7994

描述:最近遇到了乙個問題,在mysql中如何完成節點下的所有節點或節點上的所有父節點的查詢? 在oracle中我們知道有乙個hierarchical queries可以通過connect by來查詢,但是,在mysql中還沒有對應的函式!!! 下面給出乙個function來完成的方法 下面是sql指令碼,想要執行的直接賦值貼上進資料庫即可。

好記性不如爛筆頭

下面給出乙個function來完成的方法

下面是sql指令碼,想要執行的直接賦值貼上進資料庫即可。

建立表treenodes(可以根據需要進行更改)

– table structure for treenodes

drop table if exists treenodes;

create table treenodes (

id int(11) not null,

nodename varchar(20) default null,

pid int(11) default null,

primary key (id)

) engine=innodb default charset=latin1;

– table structure for treenodes

插入幾條資料

– records of treenodes

insert into treenodes values (『1』, 『a』, 『0』);

insert into treenodes values (『2』, 『b』, 『1』);

insert into treenodes values (『3』, 『c』, 『1』);

insert into treenodes values (『4』, 『d』, 『2』);

insert into treenodes values (『5』, 『e』, 『2』);

insert into treenodes values (『6』, 『f』, 『3』);

insert into treenodes values (『7』, 『g』, 『6』);

insert into treenodes values (『8』, 『h』, 『0』);

insert into treenodes values (『9』, 『i』, 『8』);

insert into treenodes values (『10』, 『j』, 『8』);

insert into treenodes values (『11』, 『k』, 『8』);

insert into treenodes values (『12』, 『l』, 『9』);

insert into treenodes values (『13』, 『m』, 『9』);

insert into treenodes values (『14』, 『n』, 『12』);

insert into treenodes values (『15』, 『o』, 『12』);

insert into treenodes values (『16』, 『p』, 『15』);

insert into treenodes values (『17』, 『q』, 『15』);

把下面的語句直接貼上進命令列執行即可(注意修改傳入的引數,預設rootid,表明預設treenodes)

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

delimiter //

create function `getparlist`(rootid int)

returns varchar(1000)

begin

declare stemp varchar(1000);

declare stemppar varchar(1000);

set stemp= '';

set stemppar=rootid;

#迴圈遞迴

while stempparis not nulldo

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

if stemp!= ''then

set stemp= concat(stemp,',',stemppar);

else

set stemp=stemppar;

end if;

set stemp= concat(stemp,',',stemppar);

select group_concat(pid) into stemppar from treenodeswhere pid<>id and find_in_set(id,stemppar)>0;

end while;

return stemp;

end//

執行命令

select * from treenodes where find_in_set(id,getparlist(15));

結果:

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

delimiter //

create function `getchildlist`(rootid int)

returns varchar(1000)

begin

declare stemp varchar(1000);

declare stempchd varchar(1000);

set stemp= '$';

set stempchd=cast(rootid aschar);

while stempchdis not nulldo

set stemp= concat(stemp,',',stempchd);

select group_concat(id) into stempchd from treenodeswhere find_in_set(pid,stempchd)>0;

end while;

return stemp;

end//

執行命令

select * from treenodes where find_in_set(id,getchildlist(7));

結果:

扁平化組織和層級化組織

扁平化的特點是組織幅度大層次小,優點是資訊溝通順暢,適合做專案,做創新的企業。層級化組織的特點是幅度小層次多,管理剛性大,優點是效率高,執行力強,適合傳統行業。但我覺得沒有個好的網路化溝通協調工具,比如內部im,wiki之類,就不要談什麼扁平化了。而且最難的是,組織幅度提高之後,對管理者的要求太高了...

oracle遞迴查詢(層級查詢)

select from table t start with t.id id connect by prior t.id t.parentid 從對應id開始查,包括本節點和所以子節點 select from table t start with t.parentid pareanid connec...

SQL查詢層級樹

格式 select from 表名 where 條件3 start with 條件1 connect by prior 條件2 條件1 表示從哪個節點開始查詢,也就是通過條件1 查詢到的資料,作為後續查詢的起始節點 引數 條件2 是連線條件,其中用prior表示上一條記錄,例如connect by ...