php
  • pdo
  • foreach
  • 2015-07-01 233 views 0 likes 
    0

    下面我有这个功能,那应该列表中的所有从我的数据库中的国家代码,也就是现在,再算上每个国家代码的多少次出现:PHP - 的foreach循环得到的结果

    function getAvailableCountries(){ 
        global $dbh; 
    
        $stmt = $dbh->prepare("SELECT country_code,country_name FROM users WHERE country_code!='NA' AND country_name!='NA'"); 
        $stmt->execute(); 
        $rows = $stmt->fetchAll(); 
    
        foreach ($rows as $row){ 
         $countryCode = $row["country_code"]; 
         $countryName = $row["country_name"]; 
        } 
    
        print "<option value='$countryCode'>$countryName</option>"; 
    
    } 
    

    $countryCode变量包括:USUSUSUSCA(因为美国是我的数据库现在的4倍和CA存在一个时间)(在$国家名称变量由国家的名字,相同的格式同上。)

    功能然后返回:

    <option value="US">United States of America</option> 
    

    我的问题是,虽然,我怎样才能从我的数据库可用的国家,然后打印出来,以便在每个国家只出现一次

    +0

    无论是DISTINCT或GROUP BY – Robert

    回答

    3

    添加DISTINCT到您的查询:

    $stmt = $dbh->prepare("SELECT DISTINCT country_code,country_name FROM users WHERE country_code!='NA' AND country_name!='NA'"); 
    

    您还应该添加print在循环:

    foreach ($rows as $row){ 
        $countryCode = $row["country_code"]; 
        $countryName = $row["country_name"]; 
        print "<option value='$countryCode'>$countryName</option>"; 
    } 
    
    +0

    谢谢!那就是诀窍。你能告诉我如何仅显示结果,如果数据库中有超过5个结果? – oliverbj

    +0

    添加一个'HAVING'子句 – Daan

    +0

    查询将如何看起来像? .. AND country_name!='不适用'并且有...? – oliverbj

    相关问题