У меня есть структура таблицы следующим образом, и я хочу выбрать
все активные категории
с активными продуктами
определенного родительского идентификатора.
Поэтому, если я подключу конкретный parentID, я получу только соответствующие активные подкатегории родительского объекта, содержащие активные продукты.
Это мой sql (mysql), который пока работает, но выглядит довольно неприятно, и ради академии я хочу знать, есть ли лучший способ. Мне кажется, что выбор всех идентификаторов productID, которые активны для фильтрации результатов, - это пустая трата времени, но я не могу найти способ обойти это, или MySQL найдет лучший способ обработать этот запрос?
(many-to-many upon itself)
categories
----------
categoryID
parentID
name
isActive (bool)
(linker table between categories and product)
productCategories
-----------------
productID
categoryID
products
--------
productID
name
isActive (bool)
SELECT productCategories.categoryID, categories.* FROM productCategories
LEFT JOIN categories ON
productCategories.categoryID = categories.categoryID
WHERE
productCategories.categoryID IN
(SELECT categoryID FROM categories WHERE parentID = {$parentID} AND isActive = 1)
AND
productCategories.productID IN
(SELECT productID FROM products WHERE isActive = 1)
GROUP BY productCategories.categoryID