2010-09-21 38 views
2

首先,這實際上不是CodeIgniter特有的。我無法抓住一個想法,所以任何知道PHP/SQL(或者我的問題是什麼)的人都可以跳進去。展示相冊(PHP)

我有2張表,'照片'和'相冊'。

Album columns : ID TITLE USER_ID CREATED MODIFIED 
Photo columns : ID ALBUM_ID TITLE LOC CREATED MODIFIED 

我使用的查詢

$this->db->select('*'); 
    $this->db->from('album'); 
    $this->db->join('photo', 'album.id = photo.album_id'); 
    $this->db->limit(10); 
    return $this->db->get(); 

,我認爲翻譯成

SELECT * FROM album JOIN photo ON album.id = photo.album_id LIMIT 10; 

不管怎麼說,我不明白的是如何顯示與相關照片每張專輯。

所以像...

<div class="album"> 
<img src="image1" /> 
<img src="image2" /> 
</div> 
<div class="album"> 
<img src="image3" /> 
</div> 

基本上我該怎麼辦「回聲」出正確的相冊和其相對的圖像?據我所知,foreach循環只是寫出每張圖片而不區分圖片屬於哪張專輯。

我是否應該使用JOIN查詢?

更新:

哇,你好,你是親。非常感謝您的幫助。對於任何引用這個的人來說,確保你在$ array [$ row ['id']] [] = $ row'中更改'id';無論你的相冊ID是什麼。在我的情況下,它的album_id。我最後的加入聲明是用album_id覆蓋ID。

+0

手動嘗試查詢數據庫(例如,使用phpMyAdmin或Mysql查詢瀏覽器(如果可用)),並查看結果行的樣子。它會給你一個關於如何在php循環中處理它們的好主意。 – Fanis 2010-09-21 07:06:18

+0

我在發佈問題之前做過。該查詢在phpMyAdmin中運行良好 – Elxx 2010-09-22 00:26:10

回答

2

是的,加入這兩張桌子是要走的路。

$query = $this->db->query(' 
     SELECT * 
     FROM album a 
     JOIN photo p ON a.id = p.album_id 
     LIMIT 10 
     '); 

    foreach ($query->result_array() as $row) { 
     $array[$row['id']][] = $row; 
    } 

    foreach ($array as $album) { 
     echo '<div class="album">'; 
     foreach ($album as $photo) { 
     echo '<img src="' . $photo['src'] . '"/>'; 
     } 
     echo '</div>'; 
    } 

我破解了這段代碼,我希望這對你有用。 我們從數據庫中提取所有數據,將它們放入一個多嵌套數組中,按照相冊進行分組。

然後迭代該數組並顯示最終的html。

也許不是最漂亮的解決方案,而應把工作做好;)

我使用主義與笨,它提供了此功能外的開箱,這就是所謂的陣列水化。 可能想看看它。

讓我知道如果你需要幫助設置它。

+0

我一定會看看Doctrine。明天我會清醒地回顧一下你的解決方案和ci +原則測試。 – Elxx 2010-09-21 07:53:41

+0

由於您對SO比較陌生,如果它幫助您,您能否提醒您將我的問題標記爲已接受的答案?謝謝;) – 2010-09-21 23:00:30

+0

那麼,我沒有完成解決方案..但我想早期標記不會傷害。 =) – Elxx 2010-09-22 00:23:41