2014-09-23 82 views
1

我創建一個圖片庫,用戶可以上傳圖片,但我試圖使它在用戶可以創建相冊來他們的圖像存儲英寸創建相冊圖庫

工藝作品喜歡這個。

  1. 用戶首先創建的相冊(相冊存儲在專輯表這樣)

enter image description here

  • 然後,用戶上傳的圖像進入專輯。 (存儲圖像 在畫廊表這樣)
  • enter image description here

    來加載基於他們所在的專輯我試圖做到的是獲取圖像,就像這樣。因此,對「測試集1」

    enter image description here

    我只希望在相冊中的照片加載,並與「測試專輯2」一樣。

    我創建了一個album.php頁我想要的圖像,根據它們在 。什麼專輯對於在圖像中顯示的兩個鏈路的負載上,我稱他們是這樣的。基於專輯表格。

    <a href="../gallery/album.php?=<?php echo escape ($ga->album_id);?>">

    現在,這裏是我缺乏經驗/知識在哪裏。我需要將兩個表連接在一起,我無法弄清楚如何正確編寫這個查詢。

    我想要查詢相冊表,album_id並將其與圖庫表一起加入。

    以下是我現在需要幫助的查詢。

    $gallery = DB::getInstance()->query("SELECT 
    albums.album_id, 
    gallery.id, 
    gallery.added, 
    gallery.album, 
    gallery.title, 
    gallery.description, 
    gallery.file_name 
    FROM 
    albums 
    LEFT JOIN gallery ON albums.album_id = gallery.id WHERE gallery.album = albums.album_id ORDER BY gallery.id DESC LIMIT $start, $limit"); 
    

    然後我打電話給我這樣的圖片。

    foreach($gallery->results() as $g){ 
        ?> 
        <li> 
        <a class="fancybox" rel="<?php echo escape($g->album); ?>" 
        href="../images/gallery/<?php echo escape($g->file_name); ?>"> 
        <img src="../images/gallery/<?php echo escape($g->file_name); ?>" class="max-img-border"></a> 
        <div class="galleryh"><?php echo escape($g->title); ?></div> 
        <div class="galleryp"><?php echo escape($g->description); ?></div> 
    </li> 
    
        <?php 
    } 
    ?> 
    

    如果我能弄清楚如何正確編寫JOIN查詢,我將很好。 任何解決方案將不勝感激。

    回答

    1

    您需要將一個album_id添加到圖庫表中。

    此字段將是鏈接到相冊表的外鍵。

    這將允許您在不給JOIN提供數據完整性的情況下查詢表。

    這假設你想每個圖像一個專輯。

    +0

    我希望用戶先創建一個專輯,然後他們可以添加儘可能多的圖像到該專輯中。 – echo 2014-09-24 02:41:32

    +0

    所以首先插入相冊,並使用戶上傳前需要的相冊,並閱讀album_id值,以插入 – meda 2014-09-24 02:44:32

    +0

    我現在的設置是管理員/主持人需要首先創建一個相冊。然後它將它們引導到圖像上傳頁面,並且有一個選擇菜單來選擇他們想要將其圖像轉儲到哪個相冊。這些都是在網站某些成員的私人部分完成的。然後,普通用戶將進入公共圖庫頁面,並可以看到上傳的所有圖像,如上圖所示。我只需要存檔每個專輯。因此,公衆用戶可以根據具體事件查看圖像。我想我現在明白了。只需要研究外鍵。 – echo 2014-09-24 02:56:00

    0

    一些ecommendations:

    你需要決定

    • 所有圖像是否存儲在只有一張專輯。
    • 每個圖像都有至少一個唱片分配
    • 圖像可以是「孤兒」 - 沒有專輯當前分配
    • 專輯可能是空的

    建立像

    album ---(1:n)---> image (where n = 0 - infinite) 
    
    一個RDS方案

    album <---(n:n) ---> image 
    

    image ----(n:0) ----> album (!!) 
    

    下一頁:

    • 您加入比賽... WHERE gallery.album = albums.album_id ...

    gallery.album包含了專輯標題(VARCHAR)和album.album_id一個ID(自動索引?)。這不會起作用,也不是最佳實踐:專輯和圖庫圖片之間的鏈接必須以專輯ID爲準,否則以後很難重新命名專輯。

    我還沒有進一步檢查,因爲這些是首先要理清的基礎知識。

    0

    我會使用ID號來跨表引用。 但是這個專輯名稱應該可以正常工作。這就是,如果你允許用戶更改專輯的名稱,以後你要更新所有的畫廊行,而不僅僅是專輯標題爲album.id

    嘗試

    SELECT 
    albums.album_title, 
    gallery.id, 
    gallery.added, 
    gallery.album, 
    gallery.title, 
    gallery.description, 
    gallery.file_name 
    FROM 
    albums 
    LEFT JOIN gallery ON albums.album_title = gallery.title ORDER BY gallery.id DESC LIMIT (you want here) 
    

    這將通過所有相冊,然後輸出相應的圖片庫中的圖片ID順序從高到低。

    +0

    所以你會建議在gallery和album之間的gallery表中添加album_id。我試過你的解決方案,但無法讓它正常工作。但我會繼續努力。 – echo 2014-09-23 22:56:49