如何查询mySQL中的多对多数据库?

时间:2017-02-21 21:21:01

标签: php mysql database many-to-many

我有两个表通过关联表链接多对多关系。

想法是搜索一个或多个成分以返回一个或多个食谱,而不返回相同食谱的倍数。

Recipe_Table Recipe_ID Recipe_Name

Ingredients_Table Ingredients_Table Ingredient_ID Ingredient_Name

Associative_Table 成分_ID(FK) Recipe_ID(FK)

我的查询如下:

SELECT r.recipe_name, i.ingredient_name, ri.amount FROM recipes r
INNER JOIN recipes_ingredients ri on r.recipe_id = ri.recipe_id 
INNER JOIN ingredients i on ri.ingredient_id = i.ingredient_id 
WHERE i.ingredient_name IN ('eggs', 'flour'); 

这样可以正常工作,但会返回同一食谱的倍数,例如,如果我查询“鸡蛋”这样的话。和'面粉'它返回Pancakes两次,而我只希望它匹配一次。

Picture of the associative table linking each ingredient_id to a recipe_id and each recipe_id to ingredient_ids with a unique amount for each combination..

2 个答案:

答案 0 :(得分:0)

您需要在最后一个查询中添加 group by Recipe_ID

答案 1 :(得分:0)

嗯,很多人可能会分成两个一对一的方向。

喜欢, 1 食谱 N Ingerdients。或此1 Ingerdient用于那么多食谱。

现在,这取决于您现在要去的方向:您是否正在尝试确定使用特定成分的食谱? 或者您打算选择通过食谱产生成分列表的记录?

知道这一点,你可以正确地进行分组/分离/聚合。

那么你要做什么?