У меня есть две таблицы:
Product
------------------------------------
id group_id name quick_select
------------------------------------
1 1 product1 1
2 3 product2 0
3 5 product3 1
Product_group
-----------------------
id name parent_id
-----------------------
1 group1 0
2 group2 0
3 group3 1
4 group4 1
5 group5 3
Я делаю навигационную систему для быстрого выбора товаров. Я показываю категории пользователю, и пользователь может перемещаться по ним, нажимая кнопку категории, затем переходить на уровень вниз к подкатегории и переходить на столько уровней, что в конечном итоге он не может идти глубже - тогда я показываю продукты. Сначала я покажу корневые категории, в которых есть продукты под ними и под этими подкатегориями, подкатегориями и так далее.
В моем запросе я хочу выбрать все корневые категории (где parent_id = 0), если в них есть товары, а также их подкатегории и подкатегории и т. Д., Где quick_select должен быть 1 в таблице товаров. И я не знаю глубины категорий - сколько уровней.
Возможно ли с одним запросом? Или мне нужно сделать два запроса?
Я сделал до сих пор, с этим запросом:
SELECT pg.id, pg.name, pg.parent_id AS parent_id
FROM product_group AS pg
LEFT JOIN product AS p ON pg.id = p.group_id
WHERE pg.parent_id = 0 AND p.id IS NOT NULL AND p.quick_select = 1
GROUP BY pg.id
Но я не получаю корневые категории, подкатегория которых пуста, какая подкатегория пуста, и под ней находится еще одна подкатегория с продуктами с quick_select = 1.
Извините за мой плохой английский.
Я хочу получать все категории, в которых есть продукты с quick_select = 1, а не продукты
-- Category
| |
| product
|
-- Category
|
Category
|
Category
|
multiple products