PHP下拉菜单搜索教程


Tutorials for drop down menu search in PHP

我对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>

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

我是这样做的。模式:

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列到你需要的。

我已经做了一个现场演示。