PHP、MySQL和表单--灵活的搜索?(例如:X种配料可以制作Y种食谱)

PHP、MySQL和表单--灵活的搜索?(例如:X种配料可以制作Y种食谱),php,mysql,search,dynamic,Php,Mysql,Search,Dynamic,我刚刚开始学习PHP/MySQL,请原谅这个过于简单的问题: 作为一个实践示例,我想创建一个小的配方数据库。每个食谱有X种不同的成分。我认为这个表很简单——每一行代表一个配方,第一个主键后的每一列都是一个需要/不需要真/假值的成分 但是,我如何制作一个基于复选框的表单来搜索该表,这样,如果我选中5种不同的配料胡萝卜、猪肉、大米、黄油、土豆,查询将返回我只能用这5种配料制作的所有食谱 因此,使用这5个元素和其他元素的配方将不会被返回。 但如果配方只使用了这5种配方中的4种,则会被退回 以我有限的知

我刚刚开始学习PHP/MySQL,请原谅这个过于简单的问题:

作为一个实践示例,我想创建一个小的配方数据库。每个食谱有X种不同的成分。我认为这个表很简单——每一行代表一个配方,第一个主键后的每一列都是一个需要/不需要真/假值的成分

但是,我如何制作一个基于复选框的表单来搜索该表,这样,如果我选中5种不同的配料胡萝卜、猪肉、大米、黄油、土豆,查询将返回我只能用这5种配料制作的所有食谱

因此,使用这5个元素和其他元素的配方将不会被返回。 但如果配方只使用了这5种配方中的4种,则会被退回


以我有限的知识,我设想的查询字符串似乎塞满了IFs,而且非常笨拙。。。这只是一些配料,如果我有100多种呢?Yikes.

您应该以不同的方式设计您的桌子:

配方-ID、名称 成分-ID、名称 配方成分-recipeID、IngCreditID、数量

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')

您应该以不同的方式设计桌子:

配方-ID、名称 成分-ID、名称 配方成分-recipeID、IngCreditID、数量

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')

如果您好奇的话,请记录一下,这被称为EAV数据库模型。它代表实体属性值。本例中的实体是配方,属性是成分,值是数量。更困难的部分是设计查询,以按照您希望的方式从表中获取数据。。。我相信拜伦的例子会返回一些你不想要的食谱。如果你好奇的话,请记录一下,这被称为EAV数据库模型。它代表实体属性值。本例中的实体是配方,属性是成分,值是数量。更困难的部分是设计查询,以按照您希望的方式从表中获取数据。。。我相信拜伦的例子会返回一些你不想要的食谱。