我正在尝试实现一个Web服务,它将把一些成分作为输入,它将查找数据库中的一些收件人,并将返回那些需要提供全部或部分成分作为输入的那些。
我可以很容易地找出收件人和ingrdients之间的多对多关系,因此我计划为收件人设置一个表,一个用于成分,一个链接表位于中间。但是,如果我这样做,我不知道如何以有效的方式查询表以获取所需的信息。
举一个明确的例子考虑以下内容:
输入:意大利面,鸡肉,香蒜酱,西红柿 输出应该是:
但产量不应该包括番茄酱土豆鸡(因为我们在输入成分中没有土豆)。
我将在Java和MySQL中实现这一点(尽管Java部分对于这个问题可能并不重要)。
可以帮助我解决这个问题。我真的在如何实现查询,但如果你能想到其他方法来接近它,那么这些也是受欢迎的。
提前致谢
答案 0 :(得分:1)
首先,将您想要的成分列表放入临时表中。我们称之为“所需”。
以下查询将找到仅在所需表格中包含成分的配方:
select r.recipe.name, group_concat(i.ingredientname separator ', ') as ingredients,
count(*) as numingredients
from RecipeIngredient ri join
Recipe r
on ri.recipeid = r.recipeid join
Ingredient i
on ri.ingredientid = i.ingredientid left outer join
Desired d
on i.ingredientname = d.ingredientname
group by r.recipe.name
having max(case when d.ingredientname is null then 1 else 0 end) = 0 -- all ingredients in list