php
  • mysql
  • drop-down-menu
  • 2012-03-19 81 views 1 likes 
    1

    我会尽我所能解释这一点。过滤表WHERE 1列=来自另一个表的列

    我有一个下拉列表填充国家名称从一个表。当有人选择说加拿大时,我需要第二个下拉菜单来过滤来自第二个表的地区的结果。

    这里是我使用

    <?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_region”有一个名为“国家”,应该是相当于列“值”从表“location_country”

    感谢列一如既往

    编辑:对于革顺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 
    
    +1

    当第一个'select'发生变化时,您是否将页面发布到服务器?或者,当它更改为动态填充第二个“select”时,您正在进行AJAX调用吗?如何组织代码更改取决于此。 – David 2012-03-19 18:33:01

    回答

    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> 
    
    +0

    谢谢Bridge,我还没有处理JOINS,但这是有道理的,但我会找到一个教程,我知道它,然后只是得到代码,谢谢。 – 2012-03-19 18:53:19

    +0

    因此,为什么我试着稍微解释一下 - 还有不同类型的连接,因为当你想从一个或两个表中找到所有行时,即使在相应的表中没有匹配时 - 所有都取决于你的需要。 – Bridge 2012-03-19 19:12:37

    +0

    嘿非常感谢,通过一些教程得到它的工作...有点...然而,这会打开很多实验的途径,感谢花时间向我解释这一点。 – 2012-03-20 19:24:04

    0

    那么得到一个完整的答案,你需要在你的两个表张贴等领域,但它应该这种事:

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

    查询可以这样写:

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

    感谢这几乎成功,但它仍然显示所有地区,因为我有几个国家的地区有没有办法限制它只是为了这些结果? – 2012-03-19 18:44:06

    +0

    是的,您可以添加另一个where子句来搜索国家。我更新了我的答案。 – jasonlfunk 2012-03-19 19:08:16

    +0

    谢谢杰森我很快学习感谢像你这样的人。 – 2012-03-20 19:26:21

    相关问题