mysql - 加入相册并查看其图像数和封面?

标签 mysql sql join

我正在尝试使用 MySQL 从两个表中获取特定结果,以下是两个表的格式:

          Albums                                         Images
------------------------------                 ----------------------------
  id   |   name  |   cover                       id |   image     | album
------------------------------                 ----------------------------
  1    | album1  |    3                          1  | image1.jpg  |   2
  2    | album2  |    1                          2  | image2.jpg  |   3
  3    | album3  |    0                          3  | image3.jpg  |   1
  4    | album4  |    0                          4  | image4.jpg  |   1
------------------------------                   5  | image5.jpg  |   3
                                                 6  | image6.jpg  |   1
                                               ----------------------------

现在给出上面的表格,我希望结果如下所示:

---------------------------------------
  id  |  name  |  count |  cover
---------------------------------------
  1   | album1 |   3    |  image3.jpg
  2   | album2 |   1    |  image1.jpg
  3   | album3 |   2    |    null
  4   | album4 |   0    |    null 
---------------------------------------
  • count 是给定相册中的图像数量
  • cover 是 id 与专辑封面列中的内容相匹配的图像

我尝试了一些查询,但没有一个给出我想要的结果。

SELECT a.id, 
       a.name, 
       count(p.id) AS imageCount, 
       (SELECT image 
          FROM albums, 
               photos 
         WHERE albums.cover = photos.id)
  FROM photos p
RIGHT OUTER JOIN albums a
              ON a.id=p.album
  GROUP BY a.id;

这只会导致每行列出相同的封面图像。

我也尝试过这个:

SELECT a.id, 
       a.name, 
       count(p.id) AS imageCount, 
       coverTable.image
  FROM photos p
RIGHT OUTER JOIN albums a
              ON a.id=p.album
RIGHT OUTER JOIN (SELECT albums.id, 
                         image 
                     FROM albums, 
                          photos 
                    WHERE albums.cover = photos.id) AS coverTable
              ON coverTable.id = a.id
        GROUP BY a.id;

这只会为具有封面图像的一张专辑生成一行。

最佳答案

SELECT a.id, a.name, count(p1.id) AS imageCount, p2.image as cover
FROM albums a
LEFT JOIN photos p1 ON p1.album = a.id
LEFT JOIN photos p2 ON p2.id = a.cover
GROUP BY a.id

DEMO

关于mysql - 加入相册并查看其图像数和封面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26559167/

相关文章:

java - 如何获取PreparedStatement的SQL?

c# - 加入等于一侧的比较键(startswith)

PHP MySQL,查询错误

php - 嵌套 for 循环无法正常工作

sql - 查找在一列中具有相同值而在另一列中具有其他值的行?

mysql - 右连接与左连接

ms-access - 加入时语法错误,但没有加入查询

MYSQL select distinct 不显示所有记录

mysql - 在 GROUP BY 之后有效地有一个 "WHERE CLAUSE"的 SQL 查询

mysql - 使用 CONCAT 的 SQL 语法