1

我有一个专辑库,其数据架构如下

| 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 查询来做到这一点?谢谢

4

1 回答 1

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
于 2013-04-16T07:23:48.967 回答