最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mysql查詢語句如何實現(xiàn)無限層次父子關(guān)系查詢

 更新時間:2023年07月12日 08:58:47   作者:HaSaKing_721  
這篇文章主要介紹了Mysql查詢語句如何實現(xiàn)無限層次父子關(guān)系查詢問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

一、前言

單表存儲上下級關(guān)系,使用mysql 內(nèi)置函數(shù)循環(huán)遞歸查出來

二、相關(guān)語法函數(shù)介紹

  • @

 @是用戶變量,@@是系統(tǒng)變量。

  • := 

不只在set和update時時賦值的作用,在select也是賦值的作用。

  • group_concat() 

 將group by產(chǎn)生的同一個分組中的值連接起來,返回一個字符串結(jié)果。

  • FIND_IN_SET()

查詢字段(strlist)中包含(str)的結(jié)果,返回結(jié)果為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 
	FROM
		relation,
		( SELECT @ids := 2, @l := 0 ) b 
	WHERE
		@ids IS NOT NULL 

列表化 

SELECT
	descendant.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 
	FROM
		relation,
		( SELECT @ids := 2, @l := 0 ) b 
	WHERE
		@ids IS NOT NULL 
		) descendant,
	sys_dept_relation DATA 
WHERE
	FIND_IN_SET( DATA.descendant, descendant._ids ) 
ORDER BY
	LEVEL,
	DATA.descendant

查詢ID為 8 的上級  無限級查詢

SELECT
		@id AS _id,
		( SELECT @id := ancestor FROM relation WHERE descendant = @id ) AS _pid,
		@l := @l + 1 AS LEVEL 
	FROM
		relation,
		( SELECT @id := 8, @l := 0 ) b 
	WHERE
		@id > 0 

四、效率問題

我目前測試表有8千多數(shù)據(jù)量

EXPLAN 相關(guān)參數(shù)

Select_type:

  • PRIMARY:查詢中最外層的SELECT(如兩表做UNION或者存在子查詢的外層的表操作為PRIMARY,內(nèi)層的操作為UNION)
  • DERIVED:被驅(qū)動的SELECT子查詢(子查詢位于FROM子句)
  • UNCACHEABLE SUBQUERY:一個子查詢的結(jié)果不能被緩存,必須重新評估外鏈接的第一行

Type:

  • NULL: MySQL在優(yōu)化過程中分解語句,執(zhí)行時甚至不用訪問表或索引,例如從一個索引列里選取最小值可以通過單獨索引查找完成。
  • index: Full Index Scan,index與ALL區(qū)別為index類型只遍歷索引樹
  • System:system是const類型的特例,當(dāng)查詢的表只有一行的情況下,使用system

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 對于mysql的query_cache認(rèn)識的誤區(qū)

    對于mysql的query_cache認(rèn)識的誤區(qū)

    一直以來,對于mysql的query_cache,在網(wǎng)上就流行著這樣的說法,對于mysql的query_cache鍵值就是mysql的query,所以,如果在query中有任何的不同,包括多了個空格,都會導(dǎo)致mysql認(rèn)為是不同的查詢
    2012-03-03
  • MySQL Galera Cluster部署與使用

    MySQL Galera Cluster部署與使用

    MySQLGaleraCluster是一種高可用、同步復(fù)制的數(shù)據(jù)庫解決方案,本文主要介紹了MySQL Galera Cluster 部署與使用,具有一定的參考價值,感興趣的可以了解一下
    2025-03-03
  • MySQL優(yōu)化表時提示 Table is already up to date的解決方法

    MySQL優(yōu)化表時提示 Table is already up to date的解決方法

    這篇文章主要介紹了MySQL優(yōu)化表時提示 Table is already up to date的解決方法,需要的朋友可以參考下
    2016-11-11
  • mysql排名函數(shù)ROW_NUMBER、RANK、DENSE_RANK、NTILE詳解

    mysql排名函數(shù)ROW_NUMBER、RANK、DENSE_RANK、NTILE詳解

    文章介紹了SQL中的ROW_NUMBER()、RANK()、DENSE_RANK()和NTILE()函數(shù)的定義、用法和區(qū)別,這些函數(shù)在分頁查詢、排名等場景中非常有用
    2025-03-03
  • MySQL分區(qū)表使用保姆級教程

    MySQL分區(qū)表使用保姆級教程

    分區(qū)表是將大表數(shù)據(jù)按條件拆分存儲在不同磁盤位置的數(shù)據(jù)庫優(yōu)化技術(shù),它通過將數(shù)據(jù)分散到多個獨立分區(qū)中,顯著減少查詢掃描范圍,提升查詢性能,下面就來詳細(xì)的介紹一下
    2026-03-03
  • mysql數(shù)據(jù)庫隔離級別詳解

    mysql數(shù)據(jù)庫隔離級別詳解

    SQL標(biāo)準(zhǔn)定義了4類隔離級別,包括了一些具體規(guī)則,用來限定事務(wù)內(nèi)外的哪些改變是可見的,哪些是不可見的,下面這篇文章主要給大家介紹了關(guān)于mysql數(shù)據(jù)庫隔離級別的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • Mysql中的多級復(fù)制方式

    Mysql中的多級復(fù)制方式

    這篇文章主要介紹了Mysql中的多級復(fù)制方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • MySQL查詢和篩選存儲的JSON數(shù)據(jù)的操作方法

    MySQL查詢和篩選存儲的JSON數(shù)據(jù)的操作方法

    MySQL是常用的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),為了支持非結(jié)構(gòu)化數(shù)據(jù)的存儲和查詢,MySQL引入了對JSON數(shù)據(jù)類型的支持,JSON是一種輕量級的數(shù)據(jù)交換格式,在現(xiàn)代應(yīng)用程序中得到了廣泛應(yīng)用,處理和存儲非結(jié)構(gòu)化數(shù)據(jù)變得越來越重要,本文給大家介紹mysql查詢JSON數(shù)據(jù)的相關(guān)知識,一起看看吧
    2024-01-01
  • 最新評論

    溆浦县| 赤峰市| 化州市| 上栗县| 泸西县| 尉犁县| 武胜县| 郸城县| 蚌埠市| 绩溪县| 安龙县| 惠安县| 旅游| 青海省| 惠水县| 美姑县| 正阳县| 日喀则市| 太谷县| 滕州市| 科尔| 兴安盟| 天门市| 台中市| 福清市| 萨迦县| 常山县| 万州区| 河北省| 沛县| 临朐县| 建阳市| 铁岭市| 介休市| 阿合奇县| 阳西县| 汤阴县| 南康市| 永清县| 囊谦县| 高台县|