0

我有两张桌子,一张是菜,另一张是配料。第一个站点将显示所有菜肴,但是当用户单击洋葱复选框时,查询将显示包含洋葱的项目。如果用户单击土豆复选框,则查询将显示包含洋葱和土豆等的项目。它将根据用户输入过滤结果。如果有人可以提供帮助,那就太棒了。

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

谢谢

4

4 回答 4

1

如果你想选择多个值,你可以不使用这个:

SELECT *
FROM (`Ingredients`)
WHERE `category` = '1' OR  `category` = '8'
AND `ingredients_name` = 'onion'
AND `ingredients_name` = 'potato'
AND `ingredients_name` = 'cream ';
于 2013-05-10T14:25:42.467 回答
0

我认为您应该添加一个二进制字符串列,其中包含菜肴的所有成分信息,例如,1 代表洋葱,10 代表土豆,100 代表奶油,1000 代表⋯⋯

那么如果你想找到所有的菜都含有洋葱、土豆、奶油

使用这个 sql

选择 * 从菜肴中选择meta_info“111%” 用于洋葱、土豆、奶油 选择 * 从菜肴中选择meta_info“1_1%” 用于洋葱和meta_info奶油

要完美解决它,请考虑 lucene 或 sphinx

于 2013-05-10T15:22:53.077 回答
0

Dish 和 Ingredient 之间有什么关系(Many : 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 以获得完整的约束。

于 2013-05-10T15:31:01.200 回答
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)。

于 2013-05-10T16:47:14.167 回答