2015-04-06 38 views
0

我遇到了一个我无法解决的问题。php从数组中打印更多结果并将它们分组

比方说,我有一个表在MySQL这样的:

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

我想列表一个DIV一个城市所有的名字,我想这样做的所有城市。

例子:

恩,约翰,弗兰克
妮可,韦恩
罗宾

所有这些行是在DIV,下面一个到另一个。在这种特殊情况下,结果是3格。我管理的只是特别的每个名字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>";   
    } 

任何人都可以帮助我吗?

+0

你需要多次查询和嵌套的for循环。首先查询获得独特的城市(使用DISTINCT子句)。第二个查询获取该城市所有名称的列表。在遍历第二个查询的结果时,您将创建div。 – Maximus2012

+1

你可以做一个group_concat查询 - “SELECT GROUP_CONCAT(name)as name,city FROM table_name GROUP BY city' https://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html# function_group-concat – Sean

+0

随着肖恩的建议,我得到了只有城市,并与Maximus2012我无法管理。现在我谷歌找出这些功能。 –

回答

2

解决方案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>'; 
} 
+0

就是这样。非常感谢。主题可以关闭:) –

相关问题