PHP& MySQL&表格 - 灵活搜索? (例如:X成分可以制作Y食谱)

时间:2009-10-13 07:22:13

标签: php mysql search dynamic

我刚刚开始使用PHP / MySQL,所以请原谅相当简单的问题:

作为一个练习示例,我想创建一个小的dbase配方。每种配方都有X种不同的成分。我觉得这个表很简单 - 每行代表一个配方,第一个(主键)之后的每一列都是一个TRUE / FALSE值的成分(需要/不需要)。

但是我如何制作一个可以搜索该表的基于复选框的表单,这样如果我检查5种不同的成分(胡萝卜,猪肉,米饭,黄油,土豆),查询将返回我只能用那些制作的每个食谱5种成分?

所以使用那些5和其他东西的食谱不会被退回。 但是只返回使用其中4个的配方。

由于我的知识有限,我想象的查询字符串似乎挤满了IF并且非常笨拙......而且只有少数几种成分,如果我有超过一百个?让人惊讶。

1 个答案:

答案 0 :(得分:5)

您应该以不同的方式设计表格:

  • 食谱 - ID,姓名
  • 成分 - ID,名称
  • RecipesIngredients - recipeID,ingredientID,amount

    Recipes
    ID name
    1 scalloped potato
    2 cheesy carrots
    3 saucy potato
    
    Ingredients
    ID name
    1 potato
    2 sauce
    3 cheese
    4 carrots
    
    RecipesIngredients
    recipesID ingredientID    amount
    1          1               5 lbs
    1          2               2 cups
    1          3               1 cup
    2          3               1/2 cup
    2          4               2 whole
    3          2               a smidge
    3          1               1 whole red
    

要获得所有含有奶酪和土豆的食谱:

SELECT * from recipes r 
INNER JOIN RecipesIngredients ri on r.id=ri.recipeID
INNER JOIN Ingredients i on i.id = ri.ingredientID
WHERE i.name in ('cheese','potato')