首頁 > 資料庫 > mysql教程 > 如何使用單一 SQL 查詢檢索分層資料庫中的所有子資料夾和子資料夾?

如何使用單一 SQL 查詢檢索分層資料庫中的所有子資料夾和子資料夾?

Barbara Streisand
發布: 2024-11-02 03:00:30
原創
476 人瀏覽過

How to Retrieve All Child and Subchild Folders in a Hierarchical Database using a Single SQL Query?

遞歸查詢檢索MySQL 中的所有子文件夾和子子文件夾

問題:

如何我可以設計一個SQL 查詢來檢索分層資料庫中給定父資料夾ID 的所有子資料夾嗎?

場景:

考慮一個表格資料夾以下結構:

CREATE TABLE IF NOT EXISTS `Folder` (
    `idFolder` INT(11) NOT NULL AUTO_INCREMENT,
    `FolderName` VARCHAR(150) NOT NULL,
    `idFolderParent` INT(11) NULL,
    PRIMARY KEY (`idFolder`),
    CONSTRAINT `fk_1`
    FOREIGN KEY (`idFolderParent`)
    REFERENCES `Folder` (`idFolder`)
);
登入後複製

表格填入如下:

idFolder FolderName idFolderParent
1 ADoc NULL
2 ADoc1 1
3 ADoc2 2
4 ADoc3 3
5 ADoc4 4
6 ADoc5 5
7 ADoc6 4

表填入如下:

    問題陳述:
  • 我們要設計一個查詢傳回給定父資料夾ID 的所有子資料夾和子資料夾。例如:
  • 對於父資料夾 ID 1,查詢應傳回 [2, 3, 4, 5, 6, 7]。

對於父資料夾 ID 4,查詢應傳回應傳回 [5, 7, 6]。 對於父資料夾 ID 3,查詢應傳回 [4, 5, 6, 7]。

<code class="sql">SELECT GROUP_CONCAT(lv SEPARATOR ',') 
FROM (
    SELECT @pv:=(SELECT GROUP_CONCAT(idFolder SEPARATOR ',') FROM Folder 
    WHERE FIND_IN_SET(idFolderParent, @pv)) AS lv 
    FROM Folder 
    JOIN (SELECT @pv:=5) tmp
) a;</code>
登入後複製
解決方案:

以下查詢使用遞迴技術來實現所需的結果:

  • 解釋:
  • 查詢使用使用者定義的變數@pv 儲存目前層級的以逗號分隔的子資料夾ID 清單。
SELECT 語句中的子查詢會擷取目前層級的子資料夾ID,並以逗號分隔它們.然後,外部查詢連接所有層級的結果,提供指定父級的所有子文件夾和子資料夾ID 的逗號分隔清單。

以上是如何使用單一 SQL 查詢檢索分層資料庫中的所有子資料夾和子資料夾?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板