mysql實(shí)現(xiàn)向下遞歸與向上遞歸方式
更新時(shí)間:2026年04月17日 10:04:47 作者:搬磚的夢先生
本文介紹了FIND_IN_SET函數(shù)的使用,可以替代SQL的IN查詢多個(gè)節(jié)點(diǎn)數(shù)據(jù),也可通過=關(guān)聯(lián)查詢單個(gè)節(jié)點(diǎn),此外,還提到了向下和向上遞歸查詢的方法
1、表描述
FIND_IN_SET:類似sql的in查詢查詢多個(gè)節(jié)點(diǎn)的數(shù)據(jù),這個(gè)函數(shù)可以換成=號進(jìn)行關(guān)聯(lián),=關(guān)聯(lián)時(shí)只能查詢一個(gè)節(jié)點(diǎn)的數(shù)據(jù),
表名稱: T_table
| 名稱 | 描述 |
|---|---|
| code | 數(shù)據(jù)標(biāo)識 |
| pCode | 數(shù)據(jù)父標(biāo)識 |
2、向下遞歸查詢
SELECT T3.*
-- 層級需要
-- ,T2.level_
FROM(
SELECT @code as _code,
(SELECT @code := GROUP_CONCAT(code)
FROM T_table
WHERE FIND_IN_SET(pCode, @code)
) as T1
-- 層級需要
-- ,@level := @level+1 as level_
FROM T_table,
(SELECT @code := 'code1,code2,...'
-- 層級需要
-- ,@level := -1
) T4
WHERE @code IS NOT NULL
) T2, T_table T3
WHERE FIND_IN_SET(T3.code, T2._code)
-- 不包含自身
-- AND !FIND_IN_SET(T3.code,'code1,code2,...')
3、向上遞歸查詢
SELECT T3.*
-- 層級需要
-- ,T2.level_
FROM(
SELECT @code as _code,
(SELECT @code := GROUP_CONCAT(pCode)
FROM T_table
WHERE FIND_IN_SET(code,@code)
) as T1
-- 層級需要
-- ,@level := @level+1 as level_
FROM T_table,
(SELECT @code := 'code1,code2,...'
-- 層級需要
-- ,@level := -1
) T4
WHERE @code IS NOT NULL
) T2, T_table T3
WHERE FIND_IN_SET(T3.code, T2._code)
-- 不包含自身
-- AND !FIND_IN_SET(T3.code,'code1,code2,...')
4、總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Mysql?數(shù)據(jù)庫結(jié)構(gòu)及索引類型
這篇文章主要介紹了Mysql?數(shù)據(jù)庫結(jié)構(gòu)及索引類型,數(shù)據(jù)庫索引是?mysql?數(shù)據(jù)庫中重要的組成部分,是數(shù)據(jù)庫查詢數(shù)據(jù)速度提升的關(guān)鍵,本文將介紹數(shù)據(jù)庫索引的一些內(nèi)容,下文更多相關(guān)內(nèi)容,需要的小伙伴可以參考一下2022-05-05

