文章詳情頁
Mysql查詢語句如何實現(xiàn)無限層次父子關系查詢
瀏覽:2日期:2023-06-23 19:40:37
目錄一、前言二、相關語法函數(shù)介紹三、具體實現(xiàn)查詢父級為 2 的下級 無限級查詢四、效率問題EXPLAN 相關參數(shù)總結一、前言
單表存儲上下級關系,使用mysql 內(nèi)置函數(shù)循環(huán)遞歸查出來
二、相關語法函數(shù)介紹@@是用戶變量,@@是系統(tǒng)變量。
:=不只在set和update時時賦值的作用,在select也是賦值的作用。
group_concat()將group by產(chǎn)生的同一個分組中的值連接起來,返回一個字符串結果。
FIND_IN_SET()查詢字段(strlist)中包含(str)的結果,返回結果為null或記錄
三、具體實現(xiàn)創(chuàng)建表
查詢父級為 2 的下級 無限級查詢SELECT@ids AS _ids,( SELECT @ids := GROUP_CONCAT( descendant ) FROM relation WHERE FIND_IN_SET( ancestor, @ids ) ) AS cids,@l := @l + 1 AS LEVEL FROMrelation,( SELECT @ids := 2, @l := 0 ) b WHERE@ids IS NOT NULL列表化
SELECTdescendant.LEVEL,DATA.* FROM(SELECT@ids AS _ids,( SELECT @ids := GROUP_CONCAT( descendant ) FROM relation WHERE FIND_IN_SET( ancestor, @ids ) ) AS cids,@l := @l + 1 AS LEVEL FROMrelation,( SELECT @ids := 2, @l := 0 ) b WHERE@ids IS NOT NULL ) descendant,sys_dept_relation DATA WHEREFIND_IN_SET( DATA.descendant, descendant._ids ) ORDER BYLEVEL,DATA.descendant我目前測試表有8千多數(shù)據(jù)量
Select_type:
PRIMARY:查詢中最外層的SELECT(如兩表做UNION或者存在子查詢的外層的表操作為PRIMARY,內(nèi)層的操作為UNION)DERIVED:被驅(qū)動的SELECT子查詢(子查詢位于FROM子句)UNCACHEABLE SUBQUERY:一個子查詢的結果不能被緩存,必須重新評估外鏈接的第一行Type:
NULL: MySQL在優(yōu)化過程中分解語句,執(zhí)行時甚至不用訪問表或索引,例如從一個索引列里選取最小值可以通過單獨索引查找完成。index: Full Index Scan,index與ALL區(qū)別為index類型只遍歷索引樹System:system是const類型的特例,當查詢的表只有一行的情況下,使用system總結以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。
標簽:
MySQL
數(shù)據(jù)庫
相關文章:
排行榜
