2012-12-15 42 views
1

我對數據庫的SQL :(表1)PHP while循環選擇類別

-- id 
-- city_name 
-- image 

,我想查看裏面他們每圖像城市,例如:美國有3個圖像和加拿大有2個,它會看起來像:

USA 
image 01 
image 02 
image 03 

CANADA 
image 01 
image 02 

我試過這個代碼,它會查看混合的所有記錄

$results1 = mysql_query("SELECT * FROM gallery"); 
while($r = mysql_fetch_array($results1)) { 

    echo $r[city_name]."<hr>"; 

    $city = $r[city_name]; 
    $results2 = mysql_query("SELECT * FROM gallery WHERE city_name='$city'"); 


    while($r = mysql_fetch_array($results2)){ 
     echo '<img border="0" src="'.$r['image'].'">'; 
    } 
} 

謝謝,

+0

我做到了,這段代碼只是舉個例子,謝謝 – user1778423

回答

1

糾正在你的代碼:

您將要覆蓋`第一次查詢的結果集$ R進入第二while循環

$last=''; 
    $results1 = mysql_query("SELECT * FROM gallery order by city_name ASC"); 
    while($r = mysql_fetch_array($results1)){ 

    if($last!=$r['city_name']) {  
    echo $r['city_name']."<hr>"; 
     $last = $r['city_name']; 
    } 

    $city = $r['city_name']; 

    $results2 = mysql_query("SELECT * FROM gallery WHERE city_name='$city'"); 


     while($r1 = mysql_fetch_array($results2)){ //change this variable 

        echo $r1['image']; 

     } 
    } 

解決方法二:

$data = array(); 
$results1 = mysql_query("SELECT * FROM gallery"); 
while($r = mysql_fetch_array($results1)){ 
    $data[$r['city_name']][]=$r; 
} 
foreach($data as $key=>$images){ 
    echo $key.PHP_EOL; //city name 
    foreach($images as $image){ 
     echo $image['id'].PHP_EOL; // each image id 
     echo $image['image'].PHP_EOL; // each image for city 
    } 
} 
+0

這段代碼會複製圖片的名字,因爲在美國有3張圖片和加拿大2張圖片。我想回聲美國和裏面3圖像之後,回聲加拿大里面2張圖片,謝謝 – user1778423

+0

請看我的第二個解決方案 – GBD

+0

非常感謝。它的工作現在:) – user1778423

0

簡化您的代碼與一個查詢。

<?php 
$cityImages = array(); 
$res = mysql_query("SELECT * FROM gallery"); 
while ($row = mysql_fetch_array($res)) { 
$cityImages[$row['city_name']][] = $row['image']; 
}; 
?> 

然後你可以使用$ cityImages數組。

+0

謝謝你的幫助:) – user1778423