1

データベースに1つのテーブルがあります:( SQL )

-- 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'].'">';
    }
}

ありがとう、

4

2 に答える 2

1

コードの修正:

最初のクエリの `結果セット $r を 2 番目の 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'];

        }
   }

2番目の解決策:

$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
     }
}
于 2012-12-15T16:13:38.003 に答える
0

1つのクエリでコードを簡素化します。

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

次に、$cityImages配列を使用できます。

于 2012-12-15T16:19:20.017 に答える