Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL获取多个ID匹配的值_Mysql - Fatal编程技术网

MySQL获取多个ID匹配的值

MySQL获取多个ID匹配的值,mysql,Mysql,我正在尝试创建一个配方搜索,其中可以标记多个成分,然后根据不同的搜索类型获得配方结果 假设用户搜索成分,系统将首先对成分本身进行验证,并获得搜索成分的ID。因此,IngRedentid随后被传递到下一个查询,这取决于用户用于搜索的搜索类型。当前搜索类型需要匹配与搜索成分ID完全匹配的配方 下表列出了与我的食谱相关的配料 **recipeIngredientList recipeID | ingredientID 1 | 1 1 | 2 1 | 3 2

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

假设用户搜索成分,系统将首先对成分本身进行验证,并获得搜索成分的ID。因此,IngRedentid随后被传递到下一个查询,这取决于用户用于搜索的搜索类型。当前搜索类型需要匹配与搜索成分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
假设用户搜索奶酪和黄油,然后是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
这是一个例子