2012-12-26 37 views
1

我是新來的php。我無法弄清楚如何查詢我的數據庫列出這個樣機。對於每個數組,我想查詢數據庫以僅列出與''中左側相關的內容。 我的數據庫包含2個表格。mysql查詢到數組

表1 =專輯

ID,名稱

表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'), 

     ); 
+0

請注意,mysql只能返回2d數組,因此您需要獲取所有需要的數據,然後在php中構建這樣的結構。 –

回答

1

由於開發無效居民的筆記,你需要建立來自查詢的數組產生循環。幸運的是,這是很容易:

$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(); 

編輯:激進先生所指出的,如果你想你的結果,包括空相冊,你應該JOIN更改爲LEFT JOIN。如果你這樣做,查詢將返回一個空行picPath的行,所以你必須以某種方式處理這些空路徑。一種方法是,包括類似下面的代碼建立後陣:

foreach ($q_albums as $album => &$pics) { 
    // remove dummy null entries from empty albums 
    if (!isset($pics[0])) array_shift($pics); 
} 
+0

謝謝illmari的片段。做了一些調整,並讓它工作。 – ducsu

1

@Ilmari Karonen我會用LEFT JOIN的代替JOINSELECT album.name AS albumName, picture.picPath AS picPath FROM album LEFT JOIN picture ON album.id = picture.album

+0

如果您想在將來擴展數據庫,我想推薦使用一個數字作爲您的相冊的ID值。查詢數字值與字符串值相比更快。此外,你不太可能犯錯誤。例如,如果一張專輯被稱爲「專輯中的人物」,並且名稱是圖片中的人物,您可能會遇到麻煩。 –

+0

感謝您的提示。我會牢記這一點。 – ducsu

+0

如果OP想要結果包含空白專輯,那麼你是對的,他們應該使用'LEFT JOIN'。然後,他們還必須調整其代碼以忽略數據中的任何空圖像路徑(在構建數組或處理數據時)。 –