2013-04-16 3 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 

아래 같은 데이터 스키마와 앨범 갤러리가 있습니다. 문제는 앨범 표지 기본 이미지를 설정하고 싶습니다. 표지 앨범은 사용자가 설정 한 경우 이미지 표에서 표시되지만 표지 앨범이 설정되지 않은 경우 표지로 img에서 이미지를 가져옵니다. 지금까지는이 쿼리가 작동하지만 커버 앨범에는 포함되지 않습니다.

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 열에는 항상 데이터가 있습니다. 그것은 결코 null이 될 수 없다. 사용자가 img_album_cover 열을 삽입/업데이트 할 때 앨범 표지로 설정할 이미지를 결정합니다. img_album_cover 값이 1이면 img_full_path를 반환하고 그렇지 않으면 same album_id가 – kepam