Как найти все узлы в поддереве в рекурсивном SQL-запросе?

Может быть, вручную загрузить пакет и установить его.

5
задан jamesh 19 January 2009 в 13:30
поделиться

3 ответа

Эта ссылка предоставляет учебное руководство на обоих Модель Списка Смежности (как описано в вопросе) и Вложенная Модель Набора. Это записано как часть документации для MySQL.

То, что не обсуждено в той статье, является insertion/delection временем и стоимостью обслуживания двух подходов. Например:

  • динамично выращенному дереву с помощью Вложенной Модели Набора, казалось бы, было бы нужно некоторое обслуживание для поддержания вложения (например, перенумеровывающий все левые и правые числа набора)
  • удаление узла в модели списка смежности потребовало бы обновлений по крайней мере в еще одной строке.
4
ответ дан 14 December 2019 в 09:02
поделиться

Если бы у Вас есть какие-либо волшебные книги, Вы достигаете для этого вида запроса, я хотел бы знать.

Деревья Celko и иерархии в SQL для присяжных острословов

2
ответ дан 14 December 2019 в 09:02
поделиться

Сохраните весь "путь" из идентификатора корневого узла в отдельном столбце, будучи убеждающимися использовать разделитель вначале и конец также. Например, скажем, 1 родитель 5, который является родителем 17, и Ваш символ разделителя является тире, Вы сохранили бы значение-1-5-17-в Вашем столбце пути.

Теперь для нахождения всех детей 5 лет можно просто выбрать записи, где путь включает-5-

Разделители в концах необходимы, таким образом, Вы не должны волноваться об идентификаторе, которые являются в крайнем левом или самом правом конце поля, когда Вы используете КАК.

Что касается Вашей проблемы глубины, если Вы добавляете столбец глубины к своей таблице, указывающей на текущую глубину вложения, это становится легким также. Вы ищете глубину своего стартового узла, и затем Вы добавляете x к ней, где x является количеством уровней глубоко, Вы хотите искать, и Вы отфильтровываете записи с большей глубиной, чем это.

1
ответ дан 14 December 2019 в 09:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: