2011-04-26 87 views
1

大家好,感謝您的時間。將所選國家/地區從數據庫導入選擇框

我使用下面的查詢從我的數據庫獲取信息:

$sql = "SELECT amember_countries.country, amember_countries.title, gold_profile.username, gold_profile.country AS userCountry 
     FROM amember_countries 
     LEFT JOIN gold_profile 
     ON amember_countries.country = gold_profile.country 

     ORDER BY amember_countries.title ASC 
     "; 

$rs = mysql_query($sql); 

$selected = ""; 

while($row = mysql_fetch_array($rs)) 
{ 
    if ($row['userCountry'] == $row['country'] && $row['username'] == $username){ 
    $selected = "selected"; 
    }else{ 
    $selected = ""; 

    } 
    echo "<option ".$selected." value=\"".$row['country']."\">".$row['title']."\n "; 
} 

它工作正常,但我面臨的問題是,如果3人是來自荷蘭,選擇框會顯示3次荷蘭。其他國家也是如此。

因此,例如:

user 1 is from The Netherlands 
user 3 is from The Netherlands 
user 6 is from The Netherlands 

當選擇框中點擊它顯示:

Belgium 
Canada 
Luxemburg 
Netherlands 
Netherlands 
Netherlands 

同樣的事情也發生在其他國家。

任何想法如何解決這個問題?

提前致謝!

回答

2

莫非這個可能的解決方案:

代碼方面

你可以做這樣的事情:

$a = array(); 
while($row = mysql_fetch_array($rs)) 
{ 
    if ($row['userCountry'] == $row['country'] && $row['username'] == $username){ 
    $selected = "selected"; 
    }else{ 
    $selected = ""; 

    } 
    if(!in_array($row['country'], $a)) 
    { 
     echo "<option ".$selected." value=\"".$row['country']."\">".$row['title']."\n "; 
     array_push($a, $row['country']); 
    } 
} 

數據庫

你也可以調整你的數據庫查詢簡單地選擇國家:

SELECT * FROM FROM amember_countries GROUP BY amember_countries.country

......或者是那個效果。

我個人建議數據庫解決方案,因爲這將是「正確的」解決方案(數據庫是爲了解決這類問題)。

+0

感謝您的幫助。你的第一個解決方案就像一個魅力。你能解釋一下你的第二個解決方案是什麼意思嗎? – moonwalker 2011-04-26 01:17:55

+0

第二個答案與@ mu的答案基本相同(他的答案更詳細:)) – 2011-04-26 01:26:05

1

貌似你試圖同時做兩件事情有一個查詢:

  1. amember_country獲取所有的國家。
  2. 獲取gold_profile.country$username

    $sql = "SELECT country, title 
         FROM amember_countries 
         GROUP BY country, title 
         ORDER BY title ASC 
         "; 
    

    本集團會崩潰重複:

如果你搶$username第一信息,然後這樣做是爲了得到國家列表你有更好的運氣。

然後,你需要更新你的while外觀使用國$username而不是$row['userCountry']弄清楚所選擇的選項。

+0

感謝您的回答。這不會只顯示用戶選擇的國家嗎?在示例用戶1中,它只會顯示荷蘭,而不顯示其他國家/地區?用戶必須能夠編輯國家,如果他想。 – moonwalker 2011-04-26 01:14:37

+0

SQL將從'amember_countries'中抽出所有不同的國家。你可以從'gold_profile'中用一個單獨的查詢來獲取用戶的國家。 – 2011-04-26 01:33:02