Я пытаюсь добавить возможность добавления нескольких фильтров при получении продуктов из базы данных, которая имеет базовую модель сущности-атрибута-значения.Фильтры основаны на значениях атрибутов, таких как:
- Цвета: зеленый, красный
- Размеры: маленький, большой
У меня нет проблем с однимфильтр, но я не знаю, как подойти к нескольким фильтрам одновременно.
ПРИМЕРНЫЕ ДАННЫЕ : (сокращенная версия)
SQL-файл сэтот пример структура и данные
Таблица продукты :
id name
1 jacket
2 shirt
Таблица product_variants :
id product_id
1 1
2 2
3 2
Таблица атрибуты :
id name
1 colors
2 sizes
Таблица attribute_value :
id attribute_id value
1 1 green
2 1 red
3 2 small
4 2 large
Таблица variable_details :
id product_variant_id attribute_value_id
1 1 3 (jacket - small)
2 2 1 (shirt - green)
3 2 3 (shirt - small)
4 3 1 (shirt - green)
5 3 4 (shirt - large)
Для этого примера, три варианта будут:
- Куртка (маленькая)
- Рубашка (зеленая и маленькая)
- Рубашка (зеленый и большой)
ЦЕЛЬ :
Я хочу передать идентификаторы для значений атрибута и получить продукты, соответствующие ВСЕМ указанным значениям атрибутаНапример:
products.php?attr=1&4
Если fВытравите продукты зеленого (1) и большого (4), например, только третий вариант соответствует критериям, поэтому желаемый результат будет:
product_id product_desc
2 shirt
ЧТО I 'VE TRIED :
Не думаю, что это сильно поможет, но у меня есть это для одного атрибута:
products.php?attr=1
Должно дать что-нибудь, что имеет значение атрибута зеленый(1):
SELECT products.id, products.desc, attribute_value.value FROM products
LEFT JOIN product_variants ON products.id = product_variants.product_id
LEFT JOIN variant_details ON variant_details.product_variant_id = product_variants.id
LEFT JOIN attribute_value ON attribute_value.id = variant_details.attribute_value_id
WHERE attribute_value.id = 1
GROUP BY products.id
Проблема в том, что перед предложением WHERE это то, что он производит:
id name value
1 jacket small
2 shirt green
2 shirt small
2 shirt green
2 shirt large
, а я нетзнать, как фильтровать те строки, которые имеют столбец значений, как зеленый, так и большой, например.Я думаю, что подход, который я использую для запроса, неправильный.
Любая помощь будет признательна.