sql - MySQL - 嵌套集模型 : searching in nodes

标签 sql mysql nested-sets

假设我的表中有一个名为“page”的树:

Foo
  -- Bar 1
  -- Bar 2
      -- Bar 3
  -- Some foo
  -- Some value
Bar
  -- Bar 4

我想按节点名称搜索。例如“bar%”。预期的输出应该是:

Foo
  -- Bar 1
  -- Bar 2
     -- Bar 3
Bar
  -- Bar 4

我找不到在 MySQL 中编写正确查询的解决方案。搜索不是问题 - 我不知道如何在搜索结果中获取节点的深度。

最佳答案

SELECT  mc.*,
        (
        SELECT  COUNT(*)
        FROM    page mp
        WHERE   mc.lft BETWEEN mp.lft AND mp.rgt
        ) AS depth
FROM    page mc
WHERE   mc.name LIKE 'bar%'

如果您将 (lft, rgt) 创建为单个字段 sets LineString 并创建 SPATIAL INDEX,则可以改进此查询> 在这个领域:

SELECT  mc.*,
        (
        SELECT  COUNT(*)
        FROM    page mp
        WHERE   MBRWIthin(Point(0, mc.lft), mp.sets)
        ) AS depth
FROM    page mc
WHERE   mc.name LIKE 'bar%'

有关详细信息,请参阅本文:

关于sql - MySQL - 嵌套集模型 : searching in nodes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1974541/

相关文章:

mysql - 为什么第二次运行 select 查询后返回 NULL

java - 提高 mongo 查询性能(使用子查询)

mysql - sql多表查询

mysql - 如何查看 MySQL 存储过程中的错误?

mysql - 避免对分页嵌套集进行全表扫描

mysql - 如何从表中没有条目的表中获取条目? (SQL)

python - 关系数据库的用途是什么?

mysql - 在 mysql 中使用 where 子句在同一列上进行多次连接不起作用

sql - 创建嵌套 html 列表的 cte

mysql - 将邻接表模型和嵌套集模型结合起来是否被认为是糟糕的设计?