[英]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
現在,我想選擇一個到特定文件夾的路徑,例如Bday或Celeb文件夾。 因此,我想要一個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;
但是,問題在於它還會返回另外兩個文件夾,即Private和Public 。
請幫忙。
謝謝
最好的祝福
即使它沒有直接回答您的問題,我也將發布它。
看來您可能需要將表設置為具有分層數據: 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不支持此功能。 相反,您可能必須執行注釋中建議的操作:使用存儲過程。 我沒有測試該環境,但是我想這樣的過程將包含兩個部分:
UNION
程序 該過程將簡單地遞歸調用自身,直到parent =0。我什至不知道這是否有可能,但這是一個起點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.