Вот простой SQL для поиска рецептов по ингредиентам.Вы должны быть в состоянии экстраполировать специфику оттуда.
SELECT r.*
FROM recipes r
LEFT OUTER JOIN recipe_ingredients ri ON r.recipe_id = re.recipe_id
LEFT OUTER JOIN ingredients i on ri.ingredient_id = i.ingredient_id
WHERE i.ingredient_title = "[Your Ingredient Variable]"
GROUP BY r.recipe_id;
Для нескольких ингредиентов:
SELECT r.*
FROM recipes r
LEFT OUTER JOIN recipe_ingredients ri ON r.recipe_id = re.recipe_id
LEFT OUTER JOIN ingredients i on ri.ingredient_id = i.ingredient_id
WHERE i.ingredient_title = "[First Ingredient Var]"
OR i.ingredient_title = "[Second Ingredient Var]"
GROUP BY r.recipe_id;
Хотя, если вы пытаетесь найти что-то, что имеет оба (не один илидругой), вам может потребоваться выполнить два запроса (или, по крайней мере, дополнительный выбор), что может быть довольно медленным запросом в большой базе данных.
Лучшее, что я могу придумать для одного запроса, будетбыть примерно таким:
SELECT r.*
FROM recipes r
LEFT OUTER JOIN recipe_ingredients ri ON r.recipe_id = re.recipe_id
LEFT OUTER JOIN ingredients i1 on ri.ingredient_id = i1.ingredient_id
LEFT OUTER JOIN ingredients i2 on ri.ingredient_id = i2.ingredient_id
WHERE i1.ingredient_title = "[First Ingredient Var]"
AND i2.ingredient_title = "[Second Ingredient Var]"
GROUP BY r.recipe_id;
Где вы создаете еще одно объединение для каждого дополнительного ингредиента.Этот запрос не будет возвращать рецепты, в которых есть некоторые (но не все) ингредиенты, только рецепты, которые содержат ВСЕ ингредиенты, которые вы ищете.