Выборка товаров по вложенным категориям

Рейтинг: 0Ответов: 1Опубликовано: 22.01.2023

Необходимо провести выборку по вложенным категориям

catalog
-adidas
--shoes
---sneakers
-nike
--shoes
---sneakers
....

если передаю в get параметре catalog нужно вывести все вложенные товары, если shoes все его вложенные товары и тд.

SELECT p.name, p.category_id FROM `products` as p
where p.category_id in (select c.id from `category` as c where c.alias = 'catalog') 
or p.category_id in (
    select c.id 
    from `category` as c 
        where c.parent_id = (
            select c.id 
            from `category` as c 
                where c.alias = 'catalog'
        )
)

этот код работает, но мне код не нравится. можно ли его улучшить?

Ответы

▲ 1

Теперь я доволен и кодом и выводом.

with recursive cte (id) as (
  select id 
  from category 
        where alias = 'catalog'
    
  union all
    
  select c.id 
    from category as c 
    inner join cte 
        on c.parent_id = cte.id
)
select * from products where category_id in (select * from cte);

Благодарю @Akina