mysql - 如何选择相册,统计照片,每个相册选一张照片?

标签 mysql

我目前正在构建一个自定义相册,但现在我被 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/

相关文章:

mysql - 如何在 MySQL 中执行复杂的 ORDER BY

MySQL - 不同表中的多次插入

php - 如何从 sql 数据库中获取文本字符串以在 html 代码中使用

PHP MySql 百分比

mysql - sql语句中mysql session 变量值的优先级

mysql - 命名表的最佳方式

php - 如何在sql中按两列分组?

PHP PDO,排除具有空字段值的行

mysql - 让appharbor与现有的mysql服务器一起工作

mysqldump 重写输入。 WordPress 备份