首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP/MySQL:检索邻接表模型中的单个路径

问PHP/MySQL:检索邻接表模型中的单个路径
EN

Stack Overflow用户
提问于 2010-09-02 22:05:08
回答 3查看 2.7K关注 0票数 2

有没有什么有效的方法可以在不限制深度的情况下,根据节点的ID在邻接表模型中检索一条路径?例如,如果我有一个名为" Banana“的节点的ID,我可以得到以下路径:

如果这是不可能的,这不是一个大问题,但我在想,是否可以通过while循环或其他什么方式运行连接?直到父级变为0。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-09-02 22:08:55

不,至少在MySQL中不是。这是Adjacency List Model最大的局限性之一。

你可以继续自己加入有限的次数,但这是丑陋的,笨拙的,并且不能覆盖无限的部门。您还可以下载应用程序中的所有数据,构建一个树,并在应用程序中查找路径。

一些DBMSes,如SQL Server2005、Postgres8.4和Oracle11g,支持使用带有WITH关键字的common table expressions进行递归查询。此功能允许轻松编写这样的查询,但不幸的是,MySQL还不支持递归查询。

您可能有兴趣阅读下面的文章,其中描述了一种替代模型( nested set model),它使MySQL中的递归操作变得更容易(可能):

此外,我还建议查看@Bill Karwin的以下演示文稿,他是Stack Overflow的定期贡献者:

演示文稿中描述的闭合表模型是嵌套集合的一个非常有效的替代方案。他在他的SQL Antipatterns一书(excerpt from the chapter on this topic)中更详细地描述了这个模型。

票数 2
EN

Stack Overflow用户

发布于 2010-09-02 22:11:02

不,MySQL没有像PostgreSQL、Oracle或SQL Server那样的递归查询。在使用MySQL时,邻接表模型不是一个很好的模型,嵌套集合是一个更好(但更复杂)的模型。

http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/

票数 1
EN

Stack Overflow用户

发布于 2013-03-24 16:28:29

尝试此查询:

代码语言:javascript
复制
SET @id:=12345;

SELECT content_name, content_id, (@id:=content_parent) as content_parent 
FROM 
    ( SELECT content_id, content_name, content_id, content_parent 
      FROM content_table 
      ORDER BY content_parent DESC
    ) AS aux_table 
    WHERE content_id = @id
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3627878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档