php - 如何在SQL中搜索子节点

标签 php mysql sql

假设我有一个名为 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/

相关文章:

javascript - Uncaught ReferenceError : xmlhttp is not defined?

php - 为什么 rand() 不是真正随机的?

php - 打乱随机 MYSQL 结果

sql - 在 phpMyAdmin 中实现下拉菜单

php -\b 修饰符不适用于 Unicode 字符

javascript - Google 条形图 - 如何使用 JSON 为每个条目获取 2 个不同的条形图

mysql - 如何使用 3 个参数 Laravel 从数据库中获取数据

MySQL 查询/子句执行顺序

sql - 用于多合一动态查询的 PL/pgSQL

sql - 使用 SSIS 将表数据的 XML 表示形式提取到文件中