1

我是 php 新手。我不知道如何查询我的数据库来列出这个模型。对于每个数组,我想查询数据库以仅列出与“”中左侧相关的内容。我的数据库由 2 个表组成。

表 1 = 专辑

身份证,姓名

表 2 = 图片

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 先生所说,如果您希望结果包含空专辑,您应该将 更改JOINLEFT JOIN. 如果你这样做,查询将为任何空专辑返回一个带有空值的行picPath,因此你必须以某种方式处理这些空路径。一种方法是在构建数组后包含类似以下代码的内容:

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 我会使用LEFT JOIN而不是JOINSELECT album.name AS albumName, picture.picPath AS picPath FROM album LEFT JOIN picture ON album.id = picture.album

于 2012-12-26T23:33:01.207 回答