0

我正在尝试实现一个网络服务,它将一些成分作为输入,它将在数据库中查找一些食谱,并返回那些需要作为输入提供的全部或部分成分的那些。

我可以很容易地弄清楚recipies和ingrdients之间的多对多关系,所以我打算有一个recipies表,一个用于配料,中间有一个链接表。但是,如果我这样做,我不确定如何以有效的方式查询表以获取所需的信息。

为了给出一个明确的例子,请考虑以下内容:

输入:意大利面、鸡肉、香蒜酱、西红柿 输出应为:

  • 番茄酱鸡肉意大利面(需要意大利面、鸡肉和西红柿)
  • 烤箱里有香蒜酱的意大利面(需要意大利面和香蒜酱)
  • 等等

但是输出不应该包括番茄酱土豆鸡肉(因为我们在输入成分中没有土豆)。

我将在 Java 和 MySQL 中实现这一点(尽管 Java 部分对于这个问题可能并不重要)。

somebidy可以帮助我解决这个问题。我真的很喜欢如何实现查询,但如果你能想到其他方法来处理它,那么这些也是受欢迎的。

提前致谢

4

1 回答 1

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
于 2012-08-27T18:14:07.653 回答