Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 筛选表,其中1列=另一个表中的列_Php_Mysql_Drop Down Menu - Fatal编程技术网

Php 筛选表,其中1列=另一个表中的列

Php 筛选表,其中1列=另一个表中的列,php,mysql,drop-down-menu,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

我会尽力解释的

我有一个下拉列表,其中填充了一个表中的国家名称。当有人选择加拿大时,我需要第二个下拉列表来过滤第二个名为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>";
?>
这不管用,但还有其他地方可以写吗?桌子 “location\u region”有一个名为“country”的列,该列应等于表“location\u country”中的“value”列

一如既往地谢谢你

编辑:这里是Gershon Herczeg的表结构

地点和国家类似:

ID name          value
1  Canada        CA 
2  Great Britain GB
3  United States US
ID name             value  country
1  Alberta          AB     CA
2  Alabama          AL     US
3  British Columbia BC     CA
区域的位置类似于:

ID name          value
1  Canada        CA 
2  Great Britain GB
3  United States US
ID name             value  country
1  Alberta          AB     CA
2  Alabama          AL     US
3  British Columbia BC     CA

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

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

查询可以这样编写:

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

是的,这称为内部联接-它将有效地为您提供一个大型行集合,这些行与指定的一列或多列相匹配

SELECT lr.* 
FROM location_region lr
INNER JOIN location_country lc on lr.country = lc.country
WHERE lr.country = <selected value from dropdown>
选择lr.*
从位置\u区域lr
内部连接位置\u lr.country=lc.country上的国家/地区lc
其中,lr.country=
将所选值替换到查询中,这将为您提供所选国家/地区表中的所有内容

但是,如果regions表中有一个与下拉列表中的值匹配的country列,为什么不从中选择一个作为开始

SELECT * 
FROM location_region 
WHERE country = <selected value from dropdown>
选择*
从地理位置
其中国家=

当第一个
选择更改时,您是否将页面发布到服务器?或者,当它更改为动态填充第二个
select
时,您是否正在进行AJAX调用?你如何组织你的代码取决于这一点。感谢这几乎可以工作,但它仍然显示所有地区,因为我有几个国家的地区。有没有办法将其限制为这些结果?是的,你可以添加另一个where子句来搜索该国家。我更新了我的答案。谢谢Bridge,我还没有处理连接,这很有意义,不过,我会找到一个教程,我宁愿知道它,然后得到代码,谢谢。因此,我试图解释一下它的原因-也有不同类型的连接,当您需要一个或两个表中的所有行时即使在相应的版本中没有匹配项,这都取决于您的需要。嘿,非常感谢,通过一些教程使它工作了。。。有点……不过这为实验开辟了很多途径。谢谢你花时间给我解释。没问题——我们都是从某个地方开始的!