Есть 3 таблицы:
recipe - id, name
ингредиенты - id, name
таблица связей - recipe_ingredient (recipe_id, ingredient_id)
Как мне сделать выборку из данных таблиц, если мне нужно искать рецепт, максимально похожий к выбранным пользователем ингредиентам?
Сначала следует определиться, что вы подразумеваете под «максимально похожий к выбранным пользователем ингредиентам». Например:
Пример запроса:
SELECT
recipe_id,
COUNT(CASE
WHEN ingredient_id IN (1,2,3) -- Перечень имеющихся ингредиентов через запятую
THEN NULL
ELSE 1
END) AS ing_notfound_count,
COUNT(CASE
WHEN ingredient_id IN (1,2,3) -- Перечень имеющихся ингредиентов через запятую
THEN 1
END) AS ing_found_count
FROM recipe_ingredient
GROUP BY recipe_id
ORDER BY ing_notfound_count ASC, ing_found_count DESC;
Запрос вернет столбцы рецепт, число ингредиентов не указанных пользователем в нем и число указанных ингредиентов в нем.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости