过滤表WHERE 1列=另一个表中的列

时间:2012-03-19 18:30:23

标签: php mysql drop-down-menu

我会尽力解释这个问题。

我在一个表格中填写了国家/地区名称的下拉列表。当有人选择说加拿大时,我需要第二个下拉列表来过滤第二个名为regions的表格的结果。

这是我正在使用的代码

<?php
$query="SELECT * FROM location_region";

$result = mysql_query ($query);
echo "<select id='province_select' name='province_select' class='province_select' style='width:540px' value=''></option>";

while($nt=mysql_fetch_array($result)){
echo "<option value=$nt[value]>$nt[name]</option>"

}
echo "</select>";
?>

我知道我必须更改查询,但我可以执行以下操作:

$query="SELECT * FROM location_region WHERE country EQUALS value FROM location_country";

这不起作用,但还有另外写这个吗?桌子 “location_region”有一个名为“country”的列,它应该等于“location_country”表中的“value”列

一如既往地谢谢

编辑:对于Gershon Herczeg,这里是表结构

location_country类似于:

ID name          value
1  Canada        CA 
2  Great Britain GB
3  United States US

location_region类似于:

ID name             value  country
1  Alberta          AB     CA
2  Alabama          AL     US
3  British Columbia BC     CA

3 个答案:

答案 0 :(得分:2)

是的,这被称为内部联接 - 它将有效地为您提供一个在指定列上匹配的行的大集合。

SELECT lr.* 
FROM location_region lr
INNER JOIN location_country lc on lr.country = lc.country
WHERE lr.country = <selected value from dropdown>

将所选值替换为查询,这可以为您所选国家/地区的区域表提供所有内容。

但是,如果您在区域表中有一个与您的下拉列表中的值匹配的国家/地区列,那么为什么不从中选择以开头?

SELECT * 
FROM location_region 
WHERE country = <selected value from dropdown>

答案 1 :(得分:1)

查询可以这样写:

$query="SELECT * FROM location_region, location_country WHERE location_region.country = location_country.value WHERE location_region.country = {USER INPUT}"

答案 2 :(得分:0)

要获得完整的答案,您需要在两个表中发布字段,但它应该是这样的:

SELECT location_region.name FROM location_region LEFT JOIN location_country ON location_regions.country = location_country.value