我刚刚开始使用PHP / MySQL,所以请原谅相当简单的问题:
作为一个练习示例,我想创建一个小的dbase配方。每种配方都有X种不同的成分。我觉得这个表很简单 - 每行代表一个配方,第一个(主键)之后的每一列都是一个TRUE / FALSE值的成分(需要/不需要)。
但是我如何制作一个可以搜索该表的基于复选框的表单,这样如果我检查5种不同的成分(胡萝卜,猪肉,米饭,黄油,土豆),查询将返回我只能用那些制作的每个食谱5种成分?
所以使用那些5和其他东西的食谱不会被退回。 但是只返回使用其中4个的配方。
由于我的知识有限,我想象的查询字符串似乎挤满了IF并且非常笨拙......而且只有少数几种成分,如果我有超过一百个?让人惊讶。
答案 0 :(得分:5)
您应该以不同的方式设计表格:
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')