一次完成對多個子節點的全部父級節點查詢

2022-01-29 03:27:23 字數 2166 閱讀 4999

大家在做專案的時候,展示樹形結構的資料,肯定遇到需要通過父節點遞迴查詢所有子節點的情況,

也應該做過通過子節點查詢所有父級節點的需求。

本次遇到的需求是一次性查詢多個子節點的所有父級節點的情況。

多個節點我們考慮到要去除重複節點。

常規做法:

1. 資料庫中寫乙個自定義函式,查詢當前節點的所有父級節點

drop

function

ifexists

fn_getparentnodes;

create

function fn_getparentnodes(currentid varchar(64

))returns

varchar(1000

)begin

declare parentid varchar(100

);

declare tempstr varchar(1000) default

currentid;

while currentid is

notnull

do

set parentid = (select pid from dept where id =

currentid );

if parentid is

notnull

then

set tempstr = concat(parentid,','

,tempstr);

set currentid =

parentid;

else

set currentid =

parentid;

endif

;

endwhile

;return

tempstr;

end;

select id,pid,name from dept where find_in_set(id, fn_getparentnodes('

11'))

2. 後台多次傳遞子節點呼叫當前子節點子查詢所有父級節點。

3.單次呼叫到的結果存到list中。

4.多次呼叫的結果彙總,去重作為最終結果。

其實還有種最簡單的做法:利用union查詢,結果自動去重

select id,pid,name from dept where find_in_set(id, fn_getparentnodes('11'

))union

select id,pid,name from dept where find_in_set(id, fn_getparentnodes('18'

))order

by pid

如果達到如上效果,一種在mysql執行動態sql,

還有一種是通過mybatis foreach標籤實現:

/**

* 查詢多個部門的所有父級部門(遞迴,資料量大,肯定影響效能)

* @param

deptids

* @return

*/list

getparentzteenodebydeptids(@param("deptids") string deptids);

<

select

id="getparentztreenodebydeptids"

resulttype

="com.core.node.ztreenode"

>

<

foreach

collection

="deptids"

index

="index"

item

="i"

separator

="union"

>

select

id,pid,name

from dept

where find_in_set(id, fn_getparentnodes(#))

foreach

>

order by pid;

select

>

這樣能通過一次傳遞多個子節點引數 deptids = 11,18,完成最終結果查詢。

一次master節點notReady的修復過程

這天開啟電腦,發現master節點的狀態異常,是notready狀態。其他計算機點還好時ready狀態。首先通過命令etcdctl member list確認etcd集群是ok的。這時檢查master節點上的各個kube相關程序都在.但通過systemctl status kubelet,kubel...

用Metasploit完成的一次滲透測試

metasploit是乙個相當優秀的滲透工具,他不僅有強大的功能,還有簡單的操作。這使得metasploit成為了業內最著名的工具。我們可以用metasploit進行很多對目標的攻擊操作,例如對計算機的作業系統進行攻擊,對目標機的應用程式進行攻擊,對客戶端發起攻擊等等。metasploit這個工具不...

Struts2完成一次請求的過程

struts2請求過程 1.當servlet容器接收到乙個請求後,將請求交給你在web.xml檔案中配置的過濾器filterdispatcher,呼叫它的dofilter 方法。4.filterdispatcher呼叫dispatcher類的serviceaction 方法。5.dispatcher...