php从数组中打印更多结果并对它们进行分组


php print more results from array and group them

我有一个问题无法解决。

假设我在mysql中有一个这样的表:

 id |  name   |  city
 ---|---------|---------
 1  |  En     |  Madrid
 2  |  Nicole |  Paris
 3  |  Robin  |  London
 4  |  Wayne  |  Paris
 5  |  John   |  Madrid
 6  |  Frank  |  Madrid

我想在一个div中列出一个城市的所有名称,我想为所有城市这样做。

示例:

恩,约翰,弗兰克
妮可,韦恩
Robin

所有这些行都在div中,从下到下。在这个特殊的例子中,结果是3个div。我只写了特定div中的每个名称,其中6个。我是这样做的:

$result = mysql_query("SELECT * FROM table_name");
$count=mysql_num_rows($result);    
$i=0;
for($i=0;$i<=$count-1;$i++)
  {            
    $row=mysql_fetch_array( $result );    
    echo "<div>$row[name]</div>";        
  }  

有人能帮我吗?

解决方案1

$result = mysql_query("SELECT * FROM table_name ORDER BY city");
$count=mysql_num_rows($result);
$i=0;
$city = '';
for($i=0;$i<=$count-1;$i++) { 
    $row=mysql_fetch_array( $result );
    if ($city == '' ) {
       echo "<div>";    
    } elseif ($city<>$row['city']) {
       echo "</div><div>";  
    }  
    $city = $row['city']
    echo $row['name'].' &nbsp';
} 
if ($city<>'') echo '</div>';

解决方案2

$result = mysql_query("SELECT GROUP_CONCAT(name) as name_list, city FROM table_name GROUP BY city");
$count=mysql_num_rows($result);
$i=0;
$city = '';
for($i=0;$i<=$count-1;$i++) { 
    $row=mysql_fetch_array( $result );
    echo '<div>'.$row['name_list'].'</div>';
}