欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mysql父子集查詢(根據(jù)父級(jí)查詢所有子集)

 更新時(shí)間:2024年02月06日 14:59:48   作者:咕嚕咕?;? 
某些場(chǎng)景可能需要維護(hù)一些有父子關(guān)系的數(shù)據(jù),本文主要介紹了mysql父子集查詢(根據(jù)父級(jí)查詢所有子集),具有一定的參考價(jià)值,感興趣的可以了解一下

在表中一定要有id和pid,這樣才能使用該sql。

需求1:

根據(jù)pid查詢出其下的所有子集(比如,子集的子集的子集…)全部查詢出來(lái)。

  • 首先,在表中按照父節(jié)點(diǎn)(parent_id)和id字段(id)的順序?qū)?shù)據(jù)進(jìn)行排序,并將排序后的結(jié)果存入 org_query 子查詢中。
  • 然后,使用變量 @id 以遞歸方式檢索所有與指定節(jié)點(diǎn)相關(guān)的所有子節(jié)點(diǎn)。該變量初始化為 pid,并在 WHERE 子句和 SET 子句中用于確定與指定節(jié)點(diǎn)相關(guān)的行,直到找到樹(shù)的底部節(jié)點(diǎn)為止。關(guān)鍵的查詢部分是 CONCAT(@id, ‘,’, id) 函數(shù),它將每個(gè)查找到的子節(jié)點(diǎn)的id添加到 @id 變量中。其它一些細(xì)節(jié)如FIND_IN_SET 也保證了真正意義上的遞歸。
  • 最后,使用 GROUP_CONCAT 函數(shù)將子節(jié)點(diǎn)ID綜合成一個(gè)用逗號(hào)分隔的字符串(all_sub_ids),并輸出結(jié)果表。
SELECT GROUP_CONCAT(id) AS all_sub_ids 
FROM (
  SELECT * FROM (
    SELECT id,parent_id 
    FROM 表
    ORDER BY parent_id, id
  ) org_query,
  (SELECT @id := 此處填寫(xiě)需要查詢的PID) initialisation
  WHERE FIND_IN_SET(parent_id, @id) > 0
  AND @id := CONCAT(@id, ',', id)
) sub_query;

這樣就把pid下所有的子集全部查詢出來(lái),但是只在一列輸出,用,分割開(kāi)來(lái):

在這里插入圖片描述

需求2:

根據(jù)pid查詢出其下的所有子集(比如,子集的子集的子集…)全部查詢出來(lái),但是需要作為集合列表展示,一個(gè)id作為一條數(shù)據(jù):
這個(gè)sql使用時(shí),需要區(qū)別mysql版本是5還是8!

  • 首先,根據(jù)指定的節(jié)點(diǎn)ID,找到它在樹(shù)形結(jié)構(gòu)中的所有子節(jié)點(diǎn)。
  • 然后,將所有子節(jié)點(diǎn)的 ID 按照層級(jí)關(guān)系連接成一個(gè)字符串。例如, ‘1,2,3,6,7,8’ 表示節(jié)點(diǎn)6, 7和 8 是節(jié)點(diǎn)3的子節(jié)點(diǎn),節(jié)點(diǎn)1,2和3是根節(jié)點(diǎn)(第一層節(jié)點(diǎn))。
  • 接下來(lái),使用 GROUP_CONCAT 函數(shù)和字符串替換操作確定每個(gè)子節(jié)點(diǎn)所在的層數(shù),并為每個(gè)節(jié)點(diǎn)分配一個(gè)行號(hào),分配行號(hào)時(shí)需要使用 MySQL 的變量 (@rownum := @rownum + 1) 來(lái)生成唯一的行數(shù)。
  • 最后,使用 SUBSTRING_INDEX 函數(shù)和整數(shù)參數(shù) rn,確定每個(gè)子節(jié)點(diǎn)的位置,截取出每個(gè)子節(jié)點(diǎn)的ID,并將它們添加到 id_list 中。
  • 最終輸出的結(jié)果是一個(gè)帶有列名為"id_list"的表,該表包含由指定節(jié)點(diǎn)的所有子節(jié)點(diǎn)的 ID 組成的逗號(hào)分隔的列表。
5.7版本如下:

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(all_sub_ids, ',', rn), ',', -1) AS id_list
FROM (
  SELECT GROUP_CONCAT(id) AS all_sub_ids, 
         ANY_VALUE(LENGTH(GROUP_CONCAT(id SEPARATOR ',')) - LENGTH(REPLACE(GROUP_CONCAT(id SEPARATOR ','), ',', '')) + 1) AS c,
         @rownum := @rownum + 1 AS rn
  FROM (
    SELECT * FROM (
      SELECT id,parent_id 
      FROM 表
      ORDER BY parent_id, id
    ) org_query,
    (SELECT @id := 此處填寫(xiě)需要查詢的PID) initialisation
    WHERE FIND_IN_SET(parent_id, @id) > 0
    AND @id := CONCAT(@id, ',', id)
  ) sub_query,
  (SELECT @rownum := 0) r
  GROUP BY rn 
) ids;
8.0版本如下:
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(all_sub_ids, ',', rn), ',', -1) AS id_list, c
FROM (
  SELECT GROUP_CONCAT(id) AS all_sub_ids, 
         LENGTH(GROUP_CONCAT(id SEPARATOR ',')) - LENGTH(REPLACE(GROUP_CONCAT(id SEPARATOR ','), ',', '')) + 1 AS c,
         @rownum := @rownum + 1 AS rn
  FROM (
    SELECT * FROM (
      SELECT id, parent_id 
      FROM 表
      ORDER BY parent_id, id
    ) org_query,
    (SELECT @id := 此處填寫(xiě)需要查詢的PID) initialization
    WHERE FIND_IN_SET(parent_id, @id) > 0
    AND @id := CONCAT(@id, ',', id)
  ) sub_query,
  (SELECT @rownum := 0) r
  GROUP BY rn, c
) ids;

簡(jiǎn)化版:
上面的sql其實(shí)就是脫褲子放屁,哈哈哈哈

SELECT id
  FROM (
    SELECT id,parent_id 
    FROM process_bim_data 
    ORDER BY parent_id, id
  ) org_query,
  (SELECT @id := 452) initialisation
  WHERE FIND_IN_SET(parent_id, @id) > 0
  AND @id := CONCAT(@id, ',', id)

結(jié)果如下:

在這里插入圖片描述

到此這篇關(guān)于mysql父子集查詢(根據(jù)父級(jí)查詢所有子集)的文章就介紹到這了,更多相關(guān)mysql父子集查詢內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Mysql存儲(chǔ)過(guò)程學(xué)習(xí)筆記--建立簡(jiǎn)單的存儲(chǔ)過(guò)程

    Mysql存儲(chǔ)過(guò)程學(xué)習(xí)筆記--建立簡(jiǎn)單的存儲(chǔ)過(guò)程

    我們常用的操作數(shù)據(jù)庫(kù)語(yǔ)言SQL語(yǔ)句在執(zhí)行的時(shí)候需要要先編譯,然后執(zhí)行,而存儲(chǔ)過(guò)程(Stored Procedure)是一組為了完成特定功能的SQL語(yǔ)句集,經(jīng)編譯后存儲(chǔ)在數(shù)據(jù)庫(kù)中,用戶通過(guò)指定存儲(chǔ)過(guò)程的名字并給定參數(shù)(如果該存儲(chǔ)過(guò)程帶有參數(shù))來(lái)調(diào)用執(zhí)行它。
    2014-08-08
  • Mysql外鍵約束的創(chuàng)建與刪除的使用

    Mysql外鍵約束的創(chuàng)建與刪除的使用

    本文主要介紹了Mysql外鍵約束的創(chuàng)建與刪除的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Mysql?數(shù)據(jù)庫(kù)結(jié)構(gòu)及索引類型

    Mysql?數(shù)據(jù)庫(kù)結(jié)構(gòu)及索引類型

    這篇文章主要介紹了Mysql?數(shù)據(jù)庫(kù)結(jié)構(gòu)及索引類型,數(shù)據(jù)庫(kù)索引是?mysql?數(shù)據(jù)庫(kù)中重要的組成部分,是數(shù)據(jù)庫(kù)查詢數(shù)據(jù)速度提升的關(guān)鍵,本文將介紹數(shù)據(jù)庫(kù)索引的一些內(nèi)容,下文更多相關(guān)內(nèi)容,需要的小伙伴可以參考一下
    2022-05-05
  • MySQL 視圖的基礎(chǔ)操作(五)

    MySQL 視圖的基礎(chǔ)操作(五)

    這篇文章主要為大家詳細(xì)介紹了MySQL 視圖的基礎(chǔ)操作,告訴大家為什么使用視圖?如何創(chuàng)建視圖等問(wèn)題,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Mysql定時(shí)數(shù)據(jù)庫(kù)備份實(shí)現(xiàn)的保姆級(jí)教程

    Mysql定時(shí)數(shù)據(jù)庫(kù)備份實(shí)現(xiàn)的保姆級(jí)教程

    數(shù)據(jù)備份本身主要是為了預(yù)防一些意外,例如服務(wù)器或者個(gè)人電腦的硬件故障、人為的錯(cuò)誤操作等情況,這篇文章主要給大家介紹了Mysql定時(shí)數(shù)據(jù)庫(kù)備份實(shí)現(xiàn)的保姆級(jí)教程,需要的朋友可以參考下
    2024-12-12
  • Linux下MySQL數(shù)據(jù)庫(kù)的主從同步復(fù)制配置

    Linux下MySQL數(shù)據(jù)庫(kù)的主從同步復(fù)制配置

    這篇文章主要介紹了Linux下MySQL數(shù)據(jù)庫(kù)的主從同步配置,
    2017-11-11
  • mysql判斷當(dāng)前時(shí)間是否在開(kāi)始與結(jié)束時(shí)間之間且開(kāi)始與結(jié)束時(shí)間允許為空

    mysql判斷當(dāng)前時(shí)間是否在開(kāi)始與結(jié)束時(shí)間之間且開(kāi)始與結(jié)束時(shí)間允許為空

    這篇文章主要介紹了mysql判斷當(dāng)前時(shí)間是否在開(kāi)始與結(jié)束時(shí)間之間且開(kāi)始與結(jié)束時(shí)間允許為空,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • mysql遷移達(dá)夢(mèng)列長(zhǎng)度超出定義的簡(jiǎn)單解決方法

    mysql遷移達(dá)夢(mèng)列長(zhǎng)度超出定義的簡(jiǎn)單解決方法

    這篇文章主要介紹了mysql遷移達(dá)夢(mèng)列長(zhǎng)度超出定義解決方法的相關(guān)資料,,在達(dá)夢(mèng)數(shù)據(jù)庫(kù)中,字符串長(zhǎng)度的存儲(chǔ)方式與MySQL不同,導(dǎo)致遷移過(guò)程中出現(xiàn)數(shù)據(jù)長(zhǎng)度不足的錯(cuò)誤,解決方法包括在MySQL中將varchar類型修改為varchar(10char)以強(qiáng)制字符存儲(chǔ),需要的朋友可以參考下
    2024-12-12
  • mysql基礎(chǔ):mysqld_safe 啟動(dòng)執(zhí)行流程詳解

    mysql基礎(chǔ):mysqld_safe 啟動(dòng)執(zhí)行流程詳解

    本篇文章是對(duì)mysql基礎(chǔ)中的mysqld_safe啟動(dòng)執(zhí)行流程進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • 深入解析MySQL?事務(wù)

    深入解析MySQL?事務(wù)

    這篇文章主要給大家分享的是mysql事務(wù)解析,事務(wù)(transaction)是業(yè)務(wù)邏輯的一個(gè)基本的單元組成,下面文章圍繞mysql事務(wù)的相關(guān)資料展開(kāi)詳細(xì)內(nèi)容,需要的朋友可以參考一下希望對(duì)大家有所幫助
    2022-01-01

最新評(píng)論