PHP下拉菜单搜索教程

时间:2013-05-02 17:48:04

标签: 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>

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

1 个答案:

答案 0 :(得分: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列修剪为您需要的列。 / p>

我做了a live forkable demo