2011-04-26 66 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

相关问题