我正在尝试创建一个食谱搜索查询,该查询返回可以仅使用用户已有的成分制作的食谱。例如,如果用户有洋葱,西红柿,牛奶,生菜,巧克力糖浆等,那么查询应该产生沙拉(洋葱,番茄,生菜),巧克力牛奶(牛奶,巧克力糖浆)等食谱。 p>
现在我有一个名为recipes的表,列id(主键)和成分。我有另一个名为user_ingredients的表,其中包含列id和成分。
有效的SQL查询会是什么样的?就集合论而言,我知道我想要所有配方,其中成分集包含在用户成分集中。我只是不知道如何将其转换为SQL,因为我有点像SQL新手。
此外,如果您认为我的数据库结构不是它应该是什么,请随意推荐更好的东西!
答案 0 :(得分:0)
如何在recipes.ingredients列中存储多种成分?你应该有另一个表 - recipe_ingredients,每个食谱的每个成分都有一行。
通过这样的设置,这个查询很简单,也应该是高效的:
SELECT recipe_id
FROM recipe_ingredients ri
LEFT JOIN (SELECT *
FROM user_ingredients
WHERE user_id = 1) ui ON (ui.ingredient = ri.ingredient)
GROUP BY recipe_id
HAVING SUM(case when user_id is null then 1 else 0 end) = 0;