2012-12-15 45 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