我目前正在构建一个自定义相册,但现在我被 mysql 查询困住了。 查询的思路是获取相册列表,计算其中的图片数量,并为每个相册获取一个缩略图。
数据库现在由两张表组成,一张包含相册数据,一张包含图片(我将它们存储在数据库中)。
表:相册
id | album_name | album_created
-------------------------------------
1 | testalbum | 2010-11-07 19:33:20
2 | some more | 2010-11-15 18:48:29
表格:图片
id | file | thumbnail | name | album_id
------------------------------------------
1 | binary | binary | test1 | 1
2 | binary | binary | test2 | 1
3 | binary | binary | test3 | 2
4 | binary | binary | test4 | 2
5 | binary | binary | test5 | 1
我当前的查询看起来像这样,但显然行不通。
SELECT alb.id album_id, alb.album_name, alb.album_created, COUNT(p.id) pcount FROM photoalbums alb LEFT JOIN pictures p ON p.album_id=alb.id GROUP BY p.album_id ORDER BY alb.album_name ASC
首先,此查询将获取相册中的所有缩略图,而我只想要一个(作为预览)。接下来,它似乎停在一张专辑上,我认为是 GROUP BY 语句导致的。
我是否需要在 while() 循环中对每个专辑执行额外的查询以获取每个专辑的单个缩略图,或者我可以只使用一个查询来完成吗?导致只有一张专辑出现在记录集中的错误是什么?
提前致谢!
最佳答案
通常,我认为您会希望按 SELECT 列表中的所有非聚合列进行分组以获得预期结果。我想到的每张专辑选择一个(任意)缩略图的第一种方式是这样的(未经测试):
SELECT alb.id AS album_id, alb.album_name, alb.album_created,
COUNT(p.id) AS pcount,
MAX(p.thumbnail) AS thumbnail
FROM photoalbums alb
LEFT JOIN pictures p ON p.album_id=alb.id
GROUP BY alb.id, alb.album_name, alb.album_created
ORDER BY alb.album_name ASC
关于mysql - 如何选择相册,统计照片,每个相册选一张照片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4189256/