我有一个图片库,我允许用户创建个人相册。我可以这样显示每一张专辑的名字。
$album = DB::getInstance()->query("SELECT `album_id`,`album_date`,`album_title` FROM `albums` ORDER BY `album_date` DESC");我要做的是为每个相册添加一张封面照片,但似乎无法使我的查询正确。这就是我在尝试的。
$album = DB::getInstance()->query("SELECT
albums.album_id,
albums.created,
albums.album_date,
albums.album_title,
gallery.file_name,
gallery.id,
gallery.album_id
FROM
albums
INNER JOIN gallery ON gallery.album_id = albums.album_id ORDER BY gallery.id DESC ;");我得到的结果是:

这就是我想要达到的结果:

我希望每个相册名称显示与最后一张照片从每个相册作为封面照片。
如果我向查询添加1的限制,则只显示一张相册。
这是我的桌子是由外键连接在一起的。
专辑表:

画廊桌:

任何解决办法,以使这项工作将是非常感谢的。
发布于 2014-09-28 05:24:10
可以使用以下查询在每个相册中选择最近的图像:
SELECT album_id, MAX(id) id
FROM gallery
GROUP BY album_id或者,您可以在每个相册中选择一个随机图像,如下所示:
SELECT g.album_id, (
SELECT id FROM gallery g2
WHERE g2.album_id = g.album_id
ORDER BY RAND()
LIMIT 1
) id
FROM gallery g
GROUP BY g.album_id以上任何一个查询都可以插入完整的查询:
SELECT a.album_id, a.created, a.album_date, a.album_title,
g.file_name, g.id, g.album_id
FROM albums a
INNER JOIN (
# above query goes here
) alb_img USING (album_id)
INNER JOIN gallery g ON g.id = alb_img.id
ORDER BY a.album_date DESC;如果您希望选择空相册以及包含一个或多个图像的相册,则将内部连接更改为左联接。
发布于 2014-09-27 23:48:13
试试看:
SELECT album_id, album_name, title, COALESCE(file_name, 'mydefaultimage.jpeg')
FROM albums
LEFT JOIN gallery on album_id = album
ORDER BY added DESC
LIMIT 1,1如果没有图像,标题将是null,文件名将包含默认的图像名称。
编辑 no ,后的DESC
发布于 2014-09-28 03:44:23
试试这个:
SELECT
`album`.`album_title`
, (SELECT file_name FROM gallery WHERE gallery.`album_id` = album.`album_id` ORDER BY file_name DESC LIMIT 1) AS file_name
FROM
`album`https://stackoverflow.com/questions/26080090
复制相似问题