【问题标题】:MySQL get values where multiple IDs matchMySQL获取多个ID匹配的值
【发布时间】:2018-01-22 09:14:26
【问题描述】:

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

假设用户搜索食材,系统会先对食材本身进行验证,并获取搜索到的食材的IDS。因此,成分 ID 然后被传递到下一个查询,这取决于用户用于搜索的搜索类型。当前搜索类型需要匹配与搜索成分 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 & cheese”和“Cheese Toasty”。

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

提前感谢您的帮助。

【问题讨论】:

    标签: mysql


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-20
      • 2017-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-24
      • 2017-04-11
      相关资源
      最近更新 更多