2013-04-16 82 views
1

我有一個專輯畫廊與數據架構如下圖所示MySQL的選擇默認的圖像,如果不存在

| album_id | album_title | 
| 1  | test  | 
| 2  | test123 | 
| 3  | testing | 

| img_id | img_albumid | img_full_path | img_album_cover 
| 1  | 1   | /blabla/1.jpg | 0 
| 2  | 1   | /blabla/2.jpg | 1 
| 3  | 1   | /blabla/3.jpg | 0 
| 4  | 2   | /blabla/4.jpg | 0 
| 5  | 2   | /blabla/5.jpg | 1 
| 6  | 3   | /blabla/6.jpg | 0 
| 7  | 3   | /blabla/7.jpg | 0 

通過交叉連接的圖像,我可以顯示專輯。問題是,我想設置專輯封面的默認圖片。如果用戶設置了封面相冊,則會從圖像表中顯示封面相冊,但如果未設置封面相冊,則只需從im​​g獲取任何圖像作爲封面。到目前爲止,這個查詢工作,但不適合封面專輯

SELECT album_id, album_title, img_full_path 
FROM album 
LEFT JOIN image ON album_id = img_albumid 
WHERE img_albumid != 0 
GROUP BY(album_id) 
limit 10 

如何使用php和mysql查詢?由於

回答

2

使用IFNULL()功能:

SELECT album_id, album_title, IFNULL(img_full_path, 'default.jpg') as img_full_path 
FROM album 
LEFT JOIN image ON album_id = img_albumid 
WHERE img_albumid != 0 
GROUP BY(album_id) 
limit 10 

來源:http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html

你甚至可以使用子查詢,它應該只包含一個行和列,就像這樣:

SELECT 
    album_id, 
    album_title, 
    IFNULL(img_full_path, (
     SELECT 
      img_full_path 
     FROM 
      image 
     WHERE 
      (img_albumid = album_id) 
      AND 
      NOT (img_full_path IS NULL) 
     ORDER BY 
      RAND() 
     LIMIT 1) 
    ) as img_full_path 
FROM 
    album LEFT JOIN image ON album_id = img_albumid 
WHERE 
    img_albumid != 0 
GROUP BY 
    album_id 
LIMIT 10 
+0

我想要的默認圖像來自數據庫行。沒有手動設置 – kepam

+0

好吧,我會改變。將它用於僅返回一行和一列的子查詢。 – BlitZ

+0

img_full_path列始終有數據。它永遠不會是空的。用戶將插入/更新img_album_cover列取決於他們將哪些圖片設置爲相冊封面。如果img_album_cover值= 1返回img_full_path否則返回image_full_path與相同album_id – kepam

相關問題