Фильтр по каталогу

grafen

Новичок
Всем привет! Делаю каталог с фильтрами. Не могу отфильтровать.

Есть три таблицы:
- Продукты
- Фильтры
- Продукт-фильтр (связь)

Таблица "продукты":
id | name
1 | Овсянка
2 | Гречка
3 | Рис

Таблица "фильтры":
id | name
1 | 0.5кг
2 | 0.7кг
3 | 0.9кг
4 | Вкусно
5 | Не вкусно
6 | Гадость

Таблица "продукт-фильтр":
id | idproduct | idfilter
1 | 1 | 1
2 | 2 | 3
3 | 3 | 1
4 | 1 | 4


Как отфильтровать, что если вкусно и 0.5кг, то выведет Овсянку.
Если 0.5кг и гадость, то ничего не выведет.
Если только 0.5кг, то выведет овсянку и рис.
Если только 0.9кг, то выведет гречку.
Если 0.9кг и не вкусно, то ничего.
И так далее, логика здесь самая обычная.

Параметры принимаю из адресной строки, получаю массив id фильтров.
Количество фильтров может быть разное.

Помогите, я уже не понимаю.

p.s. Делал сначала, чтобы все фильтры для конкретного товара хранились в поле в виде: [4][55][2] и потом искать через LIKE, но сказали, что это не правильно, переделал всю систему на способ, который описал выше и вообще не могу справиться.

Очень жду любой помощи! Заранее спасибо!
 

fixxxer

К.О.
Партнер клуба
поле id в таблице продукт-фильтр не нужно, там достаточно primary key (idproduct, idfilter)

select P.id, P.name
from product P
inner join product_filter PF on (PF.idproduct=P.id)
inner join filter F on (F.id=PF.idfilter)
where F.id in (1,4) -- номера фильтров
group by P.id
having count(F.id) >= 2 -- число фильтров

(Тут на форуме вообще не принято давать готовые решения, но это мне показалось относительно сложной задачей особенно для того что делал через like ;))
 

grafen

Новичок
Огромное спасибо! Полностью разобрался! Я сам удивился, что без издевательств дали решение, ещё раз спасибо!
 
Сверху