我仍然是PHP的新手,我从社区学到了一些东西,但我还有很多需要学习的东西,我希望你们能就这个问题给我建议。
我的问题是关于下拉菜单。我目前有一个从表格中提取信息的下拉菜单。信息显示我可以从下拉菜单中选择的成分。现在我希望能够使用这些成分在我的食谱表中搜索食谱,但我不知道如何去做。
我的ingredients
表包含两个字段。
ingredient id
和recipe id
我的recipe
表包含两个字段
recipe id
和recipe name
我的recipeingredients
表是一个复合键,有两个字段
recipe id
和ingredient 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>
我有一种感觉,我可能需要加入,但就像我说的,我是新手,所以请保持温柔。
答案 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>