Как вывести id товаров по заданному условии?
Есть таблица products (id,name,price)
таблица product_options(привязываем к продукту опцию из таблицы options)

таблица product_option_values (значения опция для продукта)

есть запрос от фильтра
divany-i-kresla?parameters[1][]=1¶meters[1][]=4¶meters[4][]=7
parameters[1][]=1 - первая единица это option_id, вторая 1 - это option_value_id
parameters[1][]=4 - первая единица это option_id, вторая 4 - это option_value_id
parameters[4][]=1 - 4 это option_id, вторая 1 - это option_value_id
как вывести товары, которые соответствуют условию
чтобы у товара обязательно присутствовали все option_id (1,1,4) и наличие option_value_id
например вывести товары у которых опция массив( дуб или ель) и цвет (красный или синий). Сейчас выводит или массив(дуб или ель) или цвет(или красный или синий)
select distinct(products.id),products.* from products
left join product_descriptions on product_descriptions.product_id = products.id
left join product_option_values on products.id = product_option_values.product_id
where
product_descriptions.language_id = 1
and products.id in (1,2,5) and products.published = 1
and product_option_values.option_value_id in (1,7)
and product_option_values.option_id in (1,4)
Ответы (2 шт):
Автор решения: Aziz Umarov
→ Ссылка
А если так посмотреть
select products.id from products
inner join product_descriptions on product_descriptions.product_id = products.id
inner join product_option_values on products.id = product_option_values.product_id
where
product_descriptions.language_id = 1
and products.id in (1,2,5) and products.published = 1
and product_option_values.option_value_id in (1,7)
and product_option_values.option_id in (1,4)
group by
products.id
having
count(distinct product_option_values.option_id) >= 2
and count(distinct product_option_values.option_value_id) >= 2
Автор решения: Aslero
→ Ссылка
вот так вот работает
SELECT distinct products.*
FROM `products`
where `id` IN (
SELECT `product_id`
FROM `product_option_values`
WHERE `option_id` = 1
AND `option_value_id` IN (2,1)
) AND `id` IN (
SELECT `product_id`
FROM `product_option_values`
WHERE `option_id` = 5
AND `option_value_id` IN (11)
)