MySQL - 嵌套集模型:在节点中搜索

Bal*_*ald 1 mysql sql nested-sets

我只想说我的桌子上有一棵名为"page"的树:

Foo
  -- Bar 1
  -- Bar 2
      -- Bar 3
  -- Some foo
  -- Some value
Bar
  -- Bar 4
Run Code Online (Sandbox Code Playgroud)

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

Foo
  -- Bar 1
  -- Bar 2
     -- Bar 3
Bar
  -- Bar 4
Run Code Online (Sandbox Code Playgroud)

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

Qua*_*noi 5

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%'
Run Code Online (Sandbox Code Playgroud)

如果您将自己创建(lft, rgt)为单个字段sets LineStringSPATIAL 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%'
Run Code Online (Sandbox Code Playgroud)

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