簡體   English   中英

從MySQL中的同一表中選擇父子

[英]selecting parent child from same table in mysql

在這里搜索了很多之后,我找不到解決問題的方法。 所以,我要發布這個問題。

我有一個數據庫表,其結構如下:

folder_id    folder_name    parent_id
--------------------------------------
    1          Private          0
    2          Public           0
    3          Photos           0
    4          December         3
    5          Bday             4
    6          Celeb            5

在分層形式中,它將類似於文件夾結構:

-- Private
-- Public
-- Photos
----- December
-------- Bday
----------- Celeb

現在,我想選擇一個到特定文件夾的路徑,例如BdayCeleb文件夾。 因此,我想要一個MySQL查詢,該查詢將僅向我返回包含特定文件夾路徑之間的文件夾的行。

例如,如果我想要Celeb文件夾的路徑,則查詢應僅返回以下行:

folder_id    folder_name    parent_id
--------------------------------------
    3          Photos           0
    4          December         3
    5          Bday             4
    6          Celeb            5

目前,我對此查詢感到困惑,並且無法使其正常工作。 我目前正在嘗試查詢:

SELECT f.*
FROM fd_folders f
LEFT JOIN fd_folders p
ON f.folder_id = p.parent_id
WHERE f.folder_id <=6
ORDER BY f.folder_id;

但是,問題在於它還會返回另外兩個文件夾,即PrivatePublic

請幫忙。

謝謝

最好的祝福

即使它沒有直接回答您的問題,我也將發布它。

看來您可能需要將表設置為具有分層數據: http : //www.sitepoint.com/hierarchical-data-database-2/

這需要花些時間才能正確設置,並且插入新數據將不是一個有趣的過程。 如果使用其他語言為您處理結果,您的生活可能會容易得多。

如果您可以選擇使用SQL Server(而不是mysql),那么整個過程實際上就變得非常簡單。 您只需要一個公共表表達式:

;WITH DirectoryTree (folderId, folderName, parentId)
AS
(

    SELECT d.folderId, d.folderName, d.parentId
    FROM zzz_Directories d
    WHERE d.folderId = 4 -- target folderId

    UNION ALL

    SELECT d.folderId, d.folderName, d.parentId
    FROM zzz_Directories d
    INNER JOIN DirectoryTree dt ON dt.parentId = d.folderId

)

SELECT dt.folderId, dt.folderName, dt.parentId
FROM DirectoryTree dt

(分號是有意的)

遺憾的是,mysql不支持此功能。 相反,您可能必須執行注釋中建議的操作:使用存儲過程。 我沒有測試該環境,但是我想這樣的過程將包含兩個部分:

  1. 如果我父母是0,還給我
  2. 如果我的父母不為0,回到我UNION程序

該過程將簡單地遞歸調用自身,直到parent =0。我什至不知道這是否有可能,但這是一個起點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM