2015-08-08 4 views
2

Я хочу получить иерархию всех категорий, содержащих продукты.Отфильтровать категории, не имеющие предметов

Вот моя структура таблицы: enter image description here

И структура категории будет:

Categ A 
     ^--Categ B 
       ^--Categ C 
         ^-- Prod 1 
         ^-- Prod 2 
       ^--Categ D 
     ^--Categ E 
       ^--Categ F 
       ^--Categ G 

Для структуры, показанной выше, я хочу, чтобы отфильтровать CATEG D, CATEG E, CATEG F, Categ G, потому что у них нет товаров или любые подкатегории, в которых есть продукты.

+0

, пожалуйста, покажите некоторые данные образца. –

+0

Я не думаю, что образцы данных необходимы для этой ситуации. –

ответ

0

Почему бы вам просто не получить все категории с продуктом, а не удалять категории без одного? Первая вещь может быть сделана внутренним соединением:

SELECT * 
FROM category_product as a 
JOIN product as b 
ON a.prod_id = b.id 
+0

Если я сделаю свой путь, я получу только те категории, у которых есть продукты, но я хочу иерархическую структуру для категорий. –

1

Вы можете сделать это итеративно. Просто запустите это удаление до тех пор, пока не будут возвращены никакие записи:

delete c 
    from category c left join 
     category child 
     on c.id = child.parent_id 
    where child.id is null and 
      not exists (select 1 from category_productd cp where cp.categ_id = c.id) ; 

У вас есть иерархическая структура данных. MySQL действительно не обеспечивает поддержку таких структур за пределами цикла.

+0

Извините, моя ошибка, я отредактировал последнюю строку. Я хочу отфильтровать, не удаляя их из базы данных. –

Смежные вопросы