SELECT *
FROM (`Ingredients`)
WHERE `category` IN ('1', '8')
AND `ingredients_name` = 'onion'
AND `ingredients_name` = 'potato'
AND `ingredients_name` = 'cream ';
由于
答案 0 :(得分:1)
如果您想选择多个值,请不要使用:
SELECT *
FROM (`Ingredients`)
WHERE `category` = '1' OR `category` = '8'
AND `ingredients_name` = 'onion'
AND `ingredients_name` = 'potato'
AND `ingredients_name` = 'cream ';
答案 1 :(得分:0)
我认为你应该添加一个二进制字符串列,其中包含菜肴的所有成分信息 例如,洋葱1个,马铃薯10个,奶油100个,⋯⋯1000个
然后如果你想找到所有的菜都含洋葱,土豆,奶油
使用此sql
选择*来自meta_info
喜欢'111%'的洋葱,土豆,奶油
使用
选择*来自meta_info
喜欢'1_1%'的洋葱和奶油的菜肴
使用
选择*来自meta_info
喜欢'__1%'的奶油
要完美地解决它,请考虑lucene或sphinx
答案 2 :(得分:0)
Dish和Ingredient之间有什么关系(很多:1,1:1等)?如果它有很多甚至很多:
SELECT *
FROM Dish d
JOIN DishIngredients di on di.dish_id = i.dish_id
JOIN Ingredient i on i.ingredient_id = di.ingredient_id
WHERE d.`category` IN ('1', '8')
AND i.`ingredients_name` = 'onion'
AND i.`ingredients_name` = 'potato'
AND i.`ingredients_name` = 'cream ';
应该提供信息。如果它是FK的设定数量,您可以加入每个FK以获得完整约束。
答案 3 :(得分:0)
我认为你需要为每个成分单独加入,动态构建查询。
示例:
SELECT a.*
FROM `Dishes` a
JOIN `Ingredients` i1 ON i1.dish_id = a.id AND i1.ingredients_name = 'onion'
JOIN `Ingredients` i2 ON i2.dish_id = a.id AND i2.ingredients_name = 'potato'
JOIN `Ingredients` i3 ON i3.dish_id = a.id AND i3.ingredients_name = 'cream'
WHERE a.category IN ('1', '8');
我在这里做了几个假设,但你应该明白这个想法。另外,我建议使用成分ID而不是字符串(或者至少在ingredients_name
上放置索引)。