我有一个照片库,我允许用户创建单独的相册。 我可以像这样显示每张专辑的名称。
$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 ;");
这是我得到的结果:
这是我想要实现的结果:
我希望每张专辑名称与每张专辑中的最后一张照片一起显示为封面照片。
如果我在查询中添加LIMIT为1,则只会显示一个相册。
以下是我用外键加入的表格。
相册表:
图库表:
任何解决这个问题的方法都会非常感激。
答案 0 :(得分:1)
您可以使用以下查询选择每个相册中的最新图像:
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;
如果您想要选择空白相册以及包含一个或多个图像的相册,请将内部连接更改为左连接。
答案 1 :(得分:0)
尝试一下:
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
,文件名将包含默认图像名称。
<强> [编辑] 强>
在,
DESC
答案 2 :(得分:0)
试试这个:
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`
答案 3 :(得分:0)
要做的第一件事是为每张专辑确定图像的最新ID:
SELECT album_id, MAX(id) id FROM gallery GROUP BY album_id
您可以轻松地将其作为内联视图(子查询)放在查询中
SELECT
a.album_name, g.file_name, g.title
FROM
(SELECT album_id, MAX(id) id FROM gallery GROUP BY album_id) a
JOIN
gallery g USING (album_id, id)
JOIN
albums a USING (album_id)
答案 4 :(得分:0)
<强>解决方案:强>
SELECT albums.album_id,
albums.album_title,
albums.album_date,
albums.created,
gallery.id,
gallery.file_name
FROM `albums`
LEFT JOIN `gallery` ON (albums.album_id = gallery.album_id)
WHERE gallery.id IN
( SELECT MAX(gallery.id)
FROM `gallery`
GROUP BY gallery.album_id)
<强>解释强>
您首先需要从gallery
表格中选择与每张专辑相对应的最新记录。使用album_id
字段对记录进行分组,并使用聚合函数MAX()
来获取分组结果中ID最大的记录。
SELECT MAX(gallery.id)
FROM `gallery`
GROUP BY gallery.album_id
然后将gallery
表与albums
表一起加入LEFT JOIN
,并在WHERE
子句中使用上述查询的结果。您可以在外部查询的SELECT
部分中指定需要使用的整个字段集
SELECT albums.album_id,
albums.album_title,
albums.album_date,
albums.created,
gallery.id,
gallery.file_name
FROM `albums`
LEFT JOIN `gallery` ON (albums.album_id = gallery.album_id)
WHERE gallery.id IN
( FIRSTQUERY....)