@akdes

Рекурсивная загрузка дерева с вспомогательной таблицей, по ID, как?

Привет всем,
пытаюсь с помощью рекурсии, за один запрос к базе подтянуть полное дерево связей, а точнее последнюю точку связи, имея одно лишь ID объекта.
Есть две таблицы:
objects:
id, name
1, Тест
2, Паша
3, Маша
4, Петя,
5, Саша

object_map:
id, parent_id, child_id
1, 1, 2
2, 2, 3
3, 4, 5

При запросе с ID 3 хочу получить 3, 4 и 5.
Глубина связей теор. бесконечна.

Возможно ли это только посредством SQL или всёже прийдётся несколько запросов делать?
У меня пока не получилось - не придумал. Дальше первой связи не ухожу.

Спасибо заранее.
  • Вопрос задан
  • 111 просмотров
Решения вопроса 1
Kwisatz
@Kwisatz
Больше web-приложений, хороших и разных
1. Поле id в таблице связей избыточно.
2. Вот выбор элемента и его потомков
with
recursive child_elements as (
  (select id
   from links
   where id = 3)
  union
  (select lt.id
   from child_elements, links as lt
   where child_elements.id = lt.parent_id))
select *
from child_elements;


3. Вот чтиво
4. Вот доки
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы