-1

我对 PHP 还是很陌生,我从社区中学到了一些东西,但我还有很多东西要学,我希望你们能给我关于这个问题的建议。

我的问题是关于下拉菜单。我目前有一个下拉菜单,可以从表格中提取信息。信息显示我可以从下拉菜单中选择的成分。现在我希望能够使用这些成分在我的食谱表中搜索食谱,但我不知道该怎么做。

我的ingredients表包含两个字段。

ingredient idrecipe id

我的recipe表包含两个字段

recipe idrecipe name

recipeingredients的复合键表有两个字段

recipe idingredient id

我下面的 HTML 代码是下拉菜单

<form id="searchForm">
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="GET">
<h3> Search your recipe here </h3>
<fieldset>
    Ingredient 1:<select name= "dropdown1" id = "drop1"/>
    <?php
    while ($line = mysql_fetch_array($result1, MYSQL_ASSOC)) {
    ?> 
    <option value="<?php echo $line['ingredientname'];?>"> <?php echo $line['ingredientname'];?> </option>
    <?php
    }
    ?>
    </select>
    Ingredient 2:<select name = "dropdown2" id = "drop2"/>
    <?php
    while ($line = mysql_fetch_array($result2, MYSQL_ASSOC)) {
    ?> 
    <option value="<?php echo $line['ingredientname'];?>"> <?php echo $line['ingredientname'];?> </option>
    <?php
    }
    ?>
    <input type="submit" value="Go!" />
    <input type="submit" value="Search" />
</form>

我有一种感觉,我可能需要加入,但就像我说的,我是新手,所以请温柔一点。

4

1 回答 1

1

这就是我的做法。架构优先:

CREATE TABLE ingredients (
  id INT NOT NULL AUTO_INCREMENT,
  name VARCHAR(40) NOT NULL,
  PRIMARY KEY (`id`)
);

CREATE TABLE recipe (
  id INT NOT NULL AUTO_INCREMENT,
  name VARCHAR(40) NOT NULL,
  PRIMARY KEY (`id`)
);

CREATE TABLE recipe_ingredients (
  recipe_id INTEGER,
  ingredient_id INTEGER
);

现在进行查询。所有包含编号成分的食谱:

SELECT
  recipe.name
FROM
  recipe
  INNER JOIN recipe_ingredients ri ON (recipe.id = ri.recipe_id)
WHERE
  ri.ingredient_id = 1;

所有包含至少一种成分的食谱:

SELECT DISTINCT
  recipe.name
FROM
  recipe
  INNER JOIN recipe_ingredients ri ON (recipe.id = ri.recipe_id)
WHERE
  ri.ingredient_id IN (1, 2, 5);

或者,如果您想按成分名称搜索:

SELECT
  recipe.name
FROM
  recipe
  INNER JOIN recipe_ingredients ri ON (recipe.id = ri.recipe_id)
  INNER JOIN ingredients i ON (ri.ingredient_id = i.id)
WHERE
  i.name = 'egg';

这些查询中的第一个要快一些,因为连接较少,而且搜索整数键比搜索字符串更快。也就是说,对于您可能在这里处理的大量数据,它可能不会有太大的不同。连接要记住的是,只要您的表设计简单,只需连接“匹配”项(例如,主键和外键),然后将SELECT列修剪为您需要的内容。

我制作了一个可分叉的现场演示

于 2013-05-03T09:37:40.393 回答