Вывод данных из базы с фильтрацией

Есть 4 таблицы: бренды(ид, имя, кол-во отзывов), товары(ид, ид бренда, ид категории, название, описание), позиции(ид, ид категории, ид бренда, ид товара, название, цена, тип, склад, наличие или предзаказ), категории(ид, категория, родительская категория, является ли категория родительской). Задача вывести все бренды и их товары с каруселью если больше 1 товара. Фильтрацию надо сделать через позиции товара по складам, цене, типу, в наличие или предзаказ.

Вопросы: Как сделать вывод с фильтрацией ? Надо фильтровать через позиции, а выводить бренды с товарами по фильтру позиций, плюс с позиций выводить склады где имеется продукт. Как выводить в карусель если у бренда больше 1 товара подходящего под фильтр? Можно как-нибудь формировать уникальный запрос для фильтрации сразу sql, если какие-нибудь данные не указаны были для фильтра?

Как формировать такой запрос? Куда вообще копать? При условие, что данных в позициях больше 100к строк и в товарах больше 10к строк.


Ответы (1 шт):

Автор решения: pgood

Можно сначала получить бренды, где товаров больше одного, примерно так:

SELECT b.*, count(p.`ид`) num_products
FROM `бренды` AS b
LEFT JOIN `позиции` AS sp ON sp.`ид бренда`=b.`ид`
LEFT JOIN `товары` AS p ON sp.`ид товара`=p.`ид`
WHERE sp.`цена` > 100 # другая фильрация
GROUP BY b.`ид`
HAVING num_products > 1

а следующим запросом уже получать товары с учетом айди полученных брендов

→ Ссылка