Как вывести id товаров по заданному условии?

Есть таблица products (id,name,price)

таблица product_options(привязываем к продукту опцию из таблицы options) введите сюда описание изображения

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

есть запрос от фильтра

divany-i-kresla?parameters[1][]=1&parameters[1][]=4&parameters[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)
  )
→ Ссылка