gpt4 book ai didi

mysql - 从mysql中的同一个表中选择父子

转载 作者:搜寻专家 更新时间:2023-10-30 20:41:32 25 4
gpt4 key购买 nike

在这里搜索了很多之后,我找不到解决问题的办法。所以,我发布了这个问题。

我有一个数据库表,其结构如下:

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. 如果我的 parent 是0,返回我
  2. 如果我的parent不为0,返回UNION过程

该过程会简单地递归调用自身,直到 parent = 0。我不知道这是否可能,但这是一个开始的地方。

关于mysql - 从mysql中的同一个表中选择父子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17447762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com