Задавайте вопросы, мы ответим
Вы не зашли.
Имеются:
- таблица с рецептами recipes (id, title)
- таблица с продуками products (id, name)
- таблица, которая представляет связь многие ко многим, recipe_products (recipe_id, product_id)
Вопрос: если даны id-шники продуктов, как с помощью одного запроса вытянуть только те рецепты, в которых содержатся данные продукты?
На первый взгляд запрос кажется очевидным, но я уже сутки над ним сижу... Помогите, пожалуйста. Заранее благодарен.
Неактивен
select r.title from products p join recipe_products rp on r.id=rp.recipe_id join recipes `r` on rp.product_id=r.id where p.id in (id-шники продуктов); -- рецепты, в которых содержится любой из заказанных продуктов
select r.title from products p join recipe_products rp on r.id=rp.recipe_id join recipes `r` on rp.product_id=r.id where p.id in (id-шники продуктов) group by r.title having count(p.id)= кол-во id-шников продуктов; -- рецепты, в которых содержится все заказанные продукты
Неактивен
Большое спасибо! Очень помогло. Мне нужен был именно второй вариант. Видно, что писали по-быстрому с головы, так что если кому-нибудь надо, то вот рабочий вариант:
select r.id
from recipies r
join recipe_products rp on rp.recipe_id = r.id
join products p on p.id = rp.product_id
where p.id in (id-шники продуктов)
group by r.id
having count(p.id) = кол-во id-шников продуктов
Неактивен