使用PHP和MySQL按国家/地区分组名称列表

时间:2010-11-08 10:52:30

标签: php mysql

我有一个MySQL数据库,其中包含一个人的姓,姓,他们的国家,以及他们是否对他们的名字在网站上列出感到高兴。

字段名称是'firstname','lastname','country'和'listedagree'。在数据库中,'listedagree'结果为Y或N.

我只想列出那些同意列出名字的人,按国家/地区分组,并按姓氏排序

对于每个国家/地区,输出的标记应如下所示:

<h4>Country name</h4>
<ul>
    <li>Amy Adams</li>
    <li>Kenneth Branagh</li>
    <li>Ray Charles</li>
</ul>

我的PHP技能非常有限 - 我真的很难找到我需要的代码来实现这一点。有人可以帮忙吗?

非常感谢提前!

3 个答案:

答案 0 :(得分:3)

SELECT * FROM users WHERE listedagree = 'Y' ORDER BY country, lastname, firstname

然后用你的PHP循环记录。每次国家/地区名称更改时,都会关闭前面的ul并在回显用户名称之前添加h4并打开ul。例如:

<?php
$country = null;
while($row = mysql_fetch_assoc($result)) {
    if($row['country'] != $country) {
        if(!is_null($country)) {
            echo '</ul>';
        }
        $country = $row['country'];
        echo "<h4>$country</h4>";
        echo '<ul>';
    }
    echo "<li>{$row['firstname']} {$row['lastname']}</li>";
}
echo '</ul>';

此代码假定您的国家/地区名称数据干净,并且您的数据库中没有英国和英国,美国和美国等国家/地区。

答案 1 :(得分:0)

我写了示例代码:)

<?php
 $result = mysql_query("SELECT country FROM tablename group by country") 
or die(mysql_error());  


while($row = mysql_fetch_array( $result )) {
        $country = $result['country'];
    $result2 = "SELECT country FROM tablename where country = '$country' and listedagree = 'y' order by surname";
            echo '<h4>'.$country.'</h4>';
            echo <ul>;
            while($row2 = mysql_fetch_array( $result2 )) {
            echo '<li>'.$row2["firstname"].' '.$row2["lastname"].'</li>';
        }
        echo '</ul>';
} 

&GT;

答案 2 :(得分:0)

你需要做两件事,首先是一个SQL查询来检索值,你可以这样做:

SELECT firstname,lastname,country FROM TABLE WHERE listedagree='Y' ORDER BY country

当您在PHP上检索数据时,您需要对其进行迭代,将实际国家/地区保存在临时变量中,以便能够检测到它何时发生变化,例如您可能会喜欢以下内容:

//Conect to the database
mysql_connect("hostaddress.com", "username", "password") or die(mysql_error()); 
//Selet the database to work with
mysql_select_db("Database_Name") or die(mysql_error());

$sql = "SELECT firstname,lastname,country FROM TABLE WHERE listedagree='Y' ORDER BY country";

//retrive the data
$result = mysql_query($sql) or die(mysql_error());

//Now iterate over the result and generate the HTML
$html = '';
$tmp_country = '';
while($data = mysql_fetch_array( $result )) 
{  
   //If the country have changed
   if($tmp_country != $data['country'])
   {
      //Check if we need to close the UL 
      if($tmp_country != '') {$html .= "</ul>"};
      //Print the country header
      $html .= "<h4>$data['country']</h4>";
      $htm l .= "<ul>";
      //store the last country
      $tmp_country = $data['country'];
   }
   //Add the names to each country
   $html .= "<li>$data['firstname'] $data['lastname']</li>";
} 
//Close the last UL
$html .= "</ul>";

我无法尝试代码,所以也许它需要一些精细的调整才能使它工作但是它会完成工作,如果你有任何问题让我知道,我会帮助你。