MySQL获取多个ID匹配的值

时间:2018-01-22 09:14:27

标签: mysql

我正在尝试创建一个食谱搜索,其中一个可以标记多个成分,然后根据不同的搜索类型获得食谱结果。

假设用户搜索成分,系统将首先验证成分本身并获取搜索成分的IDS。因此,quotaID将传递给下一个查询,这取决于用户用于搜索的搜索类型。当前的搜索类型需要匹配与搜索到的成分的ID完全匹配的食谱。

下面是成分与我的食谱相关的表格。

**recipeIngredientList
recipeID | ingredientID
1        | 1
1        | 2
1        | 3
2        | 4
2        | 2
2        | 6
3        | 1
3        | 7
3        | 2

以下是食谱表。

**recipes   
recipeID | recipeName
1        | Mac & Cheese
2        | Beef Soup
3        | Cheese Toasty

所以说用户搜索奶酪和黄油然后这些是成分ID 1 =奶酪和2 =黄油,那么这两个成分ID应该用于从食谱表中获得使用这两种成分的食谱。因此我的结果应该只给我食谱“Mac&奶酪“和”奶酪烤肉“。

但是我意识到我甚至不确定获得结果或MySQL语句应该是什么样的最佳方式。我应该加入桌子吗?或者做多选?如果是这样怎么样?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

你可以这样做。首先,加入两个表并找到其成分。然后计算与where子句中的成分总数匹配的总行数。

SELECT  a.RecipeID, a.recipeName
FROM    Recipes a
        INNER JOIN recipeIngredientList b
            ON a.recipeID = b.recipeID
WHERE   b.ingredientID IN (1, 2) -- ingredients
GROUP   BY a.RecipeID, a.recipeName
HAVING  COUNT(*) = 2 -- number of ingredients

这是Demo