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%'
Смотрите эту статью для более подробной информации: