MySQL获取多个ID匹配的值
我正在尝试创建一个配方搜索,其中可以标记多个成分,然后根据不同的搜索类型获得配方结果 假设用户搜索成分,系统将首先对成分本身进行验证,并获得搜索成分的ID。因此,IngRedentid随后被传递到下一个查询,这取决于用户用于搜索的搜索类型。当前搜索类型需要匹配与搜索成分ID完全匹配的配方 下表列出了与我的食谱相关的配料MySQL获取多个ID匹配的值,mysql,Mysql,我正在尝试创建一个配方搜索,其中可以标记多个成分,然后根据不同的搜索类型获得配方结果 假设用户搜索成分,系统将首先对成分本身进行验证,并获得搜索成分的ID。因此,IngRedentid随后被传递到下一个查询,这取决于用户用于搜索的搜索类型。当前搜索类型需要匹配与搜索成分ID完全匹配的配方 下表列出了与我的食谱相关的配料 **recipeIngredientList recipeID | ingredientID 1 | 1 1 | 2 1 | 3 2
**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
假设用户搜索奶酪和黄油,然后是IngreditId 1=奶酪和2=黄油,那么这两个IngreditId应该用于从配方表中获取使用这两种成分的配方。因此,我的结果应该只给我的食谱“Mac&cheese”和“cheese Toasty”
然而,我意识到我甚至不确定获得结果的最佳方法是什么,或者MySQL语句应该是什么样子。我应该加入桌子吗?还是多选?如果是这样,怎么办
提前感谢您的帮助。您可以这样做。首先,把两张桌子连在一起,找出它的配料。然后计算与
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
这是一个例子