Как получить 3 уровня вложенных записей одним SQL запросом?

Есть таблица Accounts с полями Id, Name, ParentId и CompanyId. ParentId может равняться NULL. В этом случае аккаунт является аккаунтом первого уровня. Соответственно аккаунт может быть также второго и третьего уровня. В некоторых аккаунтов может не быть аккаунтов второго или третьего уровня. То есть структура записей может выглядеть так:

1. Account 1
1.1 Account 2
1.1.1 Account 3
2. Account 4
2.1 Account 5
3. Account 6

Как можно получить 3 уровня вложенных записей одним SQL запросом для заданного CompanyId? Скорее всего нужно сделать 2 раза JOIN самой таблицы Accounts. Но как правильно это записать?
  • Вопрос задан
  • 2740 просмотров
Пригласить эксперта
Ответы на вопрос 3
@iamnothing
Как вариант:
SELECT * FROM :table WHERE 
  company_id = :company_id 
  OR parent_id = (
    SELECT id FROM :table WHERE company_id = :company_id)
  OR parent_id IN (
    SELECT id FROM :table WHERE parent_id = (
      SELECT id FROM :table WHERE company_id = :company_id))

А вложенный массив уже потом можно собрать в коде
Ответ написан
Комментировать
zona7o
@zona7o
Веб-разработчик
А зачем просто не выбрать все записи из таблицы и уже в коде программы формировать дерево, тем более это не исключается?
Ответ написан
zBit
@zBit
Full stack web developer
Не совсем понял что вы хотите. Вы хотите получить готовое дерево? Т.е. готовый многомерный массив?
Ответ написан
Ваш ответ на вопрос

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

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