php
  • mysql
  • drop-down-menu
  • 2012-03-19 101 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

    相關問題