Рекурсивный запрос на поиск всех потомков

16 Июля 2021 16:09

Данный пример будет работать только на версиях MySQL 8 и MariaDB 10.3 и выше, где доступен рекурсивный оператор with.

Заменям поля для выборки и таблицу, а также указываем id ресурса от которого искать потомков (parent).

with recursive cte (id, pagetitle, parent) as (
  select     id,
             pagetitle,
             parent
  from       modx_site_content
  where      parent = 3
  union all
  select     p.id,
             p.pagetitle,
             p.parent
  from       modx_site_content p
  inner join cte
          on p.parent = cte.id
)
select * from cte;

В результате списком будут выведены потомки сначала первого уровня, потом потомки второго уровня и т.д.