2015-04-06 39 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

就是這樣。非常感謝。主題可以關閉:) –

相關問題