如何从一个SQL列中获取多个值

时间:2013-05-10 14:21:14

标签: php sql codeigniter

我有两张桌子,一张是菜,另一张是食材。第一个站点将显示所有菜肴,但当用户单击洋葱复选框时,查询将显示包含洋葱的项目。如果用户单击马铃薯复选框,则查询将显示包含洋葱和马铃薯等的项目。它将根据用户输入过滤掉结果。如果有人能提供帮助,那将是非常棒的。

SELECT *
FROM (`Ingredients`)
WHERE `category` IN ('1', '8') 
AND `ingredients_name` = 'onion'
AND `ingredients_name` = 'potato'
AND `ingredients_name` = 'cream ';

由于

4 个答案:

答案 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上放置索引)。