如何在SQL中搜索子节点

时间:2015-12-09 20:03:03

标签: php mysql sql

假设我有一个名为Tags的表,其中包含id columnm name列和parent_id列。许多标签使用parent_id列嵌套。我如何有效地检查标签A是否将标签B作为非直接儿童。

以前我选择了所有具有当前标记的parent_id的标记,然后获得结果并重复任何子元素。

我如何更有效地做到这一点,以获得与搜索匹配的所有标签,并且是直接或非直接的孩子。

感谢您的帮助, 杰森

1 个答案:

答案 0 :(得分:0)

而不是在评论中讨论......这是我的建议:

  • 如果您想坚持使用MySQL,但可以使用数据库的结构,那么绝对是这样的" Closure Table" Bill Karwin建议的模式是要走的路。它允许您将数据保存在平面表设计中,同时将多级树结构抽象为单独的表,以便于数据提取。

  • 如果您想尝试不同的关系数据库系统,那么您可以尝试从Microsoft免费获得的SQL Server Express。在完全披露中,我不会使用这个,所以我不知道排除了哪些功能(而且我确定无论如何你都不会免费获得它)。因此,请进行一些调查,以确保Recursive Common Table ExpressionsCTEs)可用。如果它们是那么你可以使用Pinal Dave的blog post来使用CTE进行递归SQL技术。

  • 否则,如果您认为只有少数级别可以使用,则可以使用original suggestion并对级别数进行硬编码。