有没有什么有效的方法可以在不限制深度的情况下,根据节点的ID在邻接表模型中检索一条路径?例如,如果我有一个名为" Banana“的节点的ID,我可以得到以下路径:
如果这是不可能的,这不是一个大问题,但我在想,是否可以通过while循环或其他什么方式运行连接?直到父级变为0。
发布于 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)中更详细地描述了这个模型。
发布于 2010-09-02 22:11:02
不,MySQL没有像PostgreSQL、Oracle或SQL Server那样的递归查询。在使用MySQL时,邻接表模型不是一个很好的模型,嵌套集合是一个更好(但更复杂)的模型。
http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/
发布于 2013-03-24 16:28:29
尝试此查询:
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 = @idhttps://stackoverflow.com/questions/3627878
复制相似问题