1

私はphpが初めてです。このモックアップをリストするためにデータベースにクエリを実行する方法がわかりません。各配列について、db にクエリを実行して、'' の左側に関連するもののみを一覧表示したいと考えています。私のデータベースは2つのテーブルで構成されています。

table1 = アルバム

ID、名前

table2 = 画像

ID、アルバム、picPath

$q_albums = array(

            'People' => array(
                        ALBUM_PATH.'4.jpg',
                        ALBUM_PATH.'11.jpg',
                        ALBUM_PATH.'10.jpg'),               
            'Nature' => array(
                        ALBUM_PATH.'2.jpg',
                        ALBUM_PATH.'3.jpg',
                        ALBUM_PATH.'5.jpg',
                        ALBUM_PATH.'6.jpg',
                        ALBUM_PATH.'7.jpg'),                            
            'Art'   => array(
                        ALBUM_PATH.'1.jpg',
                        ALBUM_PATH.'8.jpg',
                        ALBUM_PATH.'9.jpg',
                        ALBUM_PATH.'2.jpg'),                
            'Wilderness' => array(
                        ALBUM_PATH.'3.jpg',
                        ALBUM_PATH.'2.jpg',
                        ALBUM_PATH.'5.jpg',
                        ALBUM_PATH.'7.jpg',
                        ALBUM_PATH.'6.jpg'),                            
            'Photography' => array(
                        ALBUM_PATH.'8.jpg',
                        ALBUM_PATH.'1.jpg',
                        ALBUM_PATH.'9.jpg',
                        ALBUM_PATH.'12.jpg'),                           
            'Fashion' => array(
                        ALBUM_PATH.'11.jpg',
                        ALBUM_PATH.'4.jpg',
                        ALBUM_PATH.'10.jpg'),

        );
4

2 に答える 2

1

dev-null-dweller が指摘しているように、ループ内のクエリ結果から配列を構築する必要があります。幸いなことに、それはとても簡単です:

$sql = <<<END
  SELECT album.name AS albumName, picture.picPath AS picPath
  FROM album JOIN picture ON album.id = picture.album
END;

$res = $mysqli->query( $sql );
$q_albums = array();
while ( $row = $res->fetch_object() ) {
    // this line actually build the array, entry by entry:
    $q_albums[ $row->albumName ][] = $row->picPath; 
}
$res->close();

編集: Radical 氏が指摘しているように、結果に空のアルバムを含めたい場合は、 を に変更する必要がありJOINますLEFT JOIN。これを行うと、クエリは空のアルバムに対して null を含む行を返すpicPathため、これらの null パスを何らかの方法で処理する必要があります。1 つの方法は、配列を構築した後に次のコードのようなものを含めることです。

foreach ( $q_albums as $album => &$pics ) {
    // remove dummy null entries from empty albums
    if ( !isset( $pics[0] ) ) array_shift( $pics );
}
于 2012-12-26T23:24:55.950 に答える
1

@Ilmari Karonen JOINの代わりにLEFT JOIN使用します。 SELECT album.name AS albumName, picture.picPath AS picPath FROM album LEFT JOIN picture ON album.id = picture.album

于 2012-12-26T23:33:01.207 に答える