MySQL - Модель вложенного множества: поиск в узлах

Скажем так, у меня есть дерево в моей таблице под названием "страница":

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

Я хочу искать по имени узла. Например "бар%". Ожидаемый результат должен быть:

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

Я не могу найти решение, чтобы написать правильный запрос в MySQL. Поиск не проблема - я не знаю, как получить глубину узла в результатах поиска.

1 ответ

Решение
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%'

Смотрите эту статью для более подробной информации:

Другие вопросы по тегам