假设我有一个名为 Tags 的表,其中包含 id 列、名称列和parent_id 列。许多标签是使用parent_id 列嵌套的。我如何有效地检查标签 A 是否将标签 B 作为非直接子代。
之前,我选择了所有具有当前标签的parent_id的标签,然后获取结果并对任何子元素重复。
我如何更有效地执行此操作,以获取与搜索匹配并且是直接或非直接子代的所有标签。
感谢您的帮助, 杰森
最佳答案
而不是在评论中讨论......这是我的建议:
如果您想坚持使用 MySQL,但可以使用数据库的结构,那么 Bill Karwin 建议的“Closure Table”模式绝对是您的最佳选择。它允许您将数据保留在平面表设计中,同时将多级树结构抽象为单独的表,以便于数据提取。
如果您想尝试不同的关系数据库系统,那么您可以尝试 SQL Server Express这是微软免费的。完全公开,我不使用这个,所以我不知道哪些功能被排除(而且我确信有些功能是否则你不会免费获得它)。因此,请做一些研究以确保
递归
Common Table Expressions
(CTE
) 可用。如果是,那么您可以使用 Pinal Dave 的 blog post使用 CTE 的递归 SQL 技术。否则,如果您认为自己只有少数关卡可供使用,则可以使用 original suggestion并对级别数进行硬编码。
关于php - 如何在SQL中搜索子节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34187958/