我正在尝试创建一个食谱搜索,其中一个可以标记多个成分,然后根据不同的搜索类型获得食谱结果。
假设用户搜索成分,系统将首先验证成分本身并获取搜索成分的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语句应该是什么样的最佳方式。我应该加入桌子吗?或者做多选?如果是这样怎么样?
提前感谢您的帮助。
答案 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。