我对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>
我有一种感觉,我可能需要一个加入,但就像我说的,我是新手,所以请温柔。
我是这样做的。模式:
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
列到你需要的。
我已经做了一个现场演示。