Есть таблица product (id, name). Есть таблица product_option (id, product_id, option_id) У продукта могут быть несколько опций, а может и не быть вообще.
Как одним запросом получить список продукции у которых есть опции (option_id), скажем: 1, 14, 25?
SELECT p.id, p.name
FROM product AS p
JOIN product_option AS o
ON p.id = o.product_id AND o.option_id in(1, 14, 25)
GROUP BY p.id, p.name
HAVING count(1)=3
3
в условии HAVING это количество условий которые должны совпасть.
Будет работать при условии, что у продукта не может быть двух одинаковых опций. Ваша структура БД этого не гарантирует, т.к. уникальность наверняка только по полю id, таблицы product_option. Рекомендую вообще убрать поле id и primary key объявить составным, из двух оставшихся колонок primary key (option_id, product_id)
.
Можно поступить следующим образом
SELECT
p.id,
p.name
FROM
product AS p
JOIN
product_option AS o1
ON
p.id = o1.product_id AND
o1.option_id = 1
JOIN
product_option AS o2
ON
p.id = o2.product_id AND
o2.option_id = 14
JOIN
product_option AS o3
ON
p.id = o3.product_id AND
o3.option_id = 25
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Пару дней назад решил начать осваивать Java (До этого работал на Си)В консоли все работает отлично, решил перейти на IDEA
Необходимо при помощи расширения chrome удалить некоторые элементы с сайта
Как сделать так, чтобы при наведении курсора на div1, вместо него открывался div2?