2014-03-04 26 views
1

因此,我有这张专辑和图像表。图像有一个名为album_id的列,它取得了他们正在坐的相册ID。到现在为止还挺好。根据MySQL中的外键选择第二个表上的行数

现在我需要从相册表中选择信息,并且还需要每个相册行的图像数量。我尝试使用LEFT JOINCOUNT(*),但它只会返回一行,这对我的情况来说效率非常低。

这是我使用的不会返回任何计数相关原始查询:

SELECT album_id, album_name, album_preview, album_owner, album_time, album_access 
FROM imgzer_albums WHERE album_owner = SOME_VALUE 

这是与LEFT JOIN查询:

SELECT a.album_id, a.album_name, a.album_preview, a.album_owner, a.album_time, a.album_access, COUNT(i.*) AS images 
FROM imgzer_albums a 
LEFT JOIN imgzer_images i 
    ON a.album_id = i.album_id 
WHERE album_owner = SOME_VALUE 

我如何获得的图像,计数对于每个相应的相册ID而不仅限于一个结果?

+0

你不觉得你缺少了'组by'条款? – KrazzyNefarious

回答

0

尝试这个

SELECT a.album_id, a.album_name, a.album_preview, a.album_owner, a.album_time, a.album_access, COUNT(i.*) AS images 
FROM imgzer_albums a 
LEFT JOIN imgzer_images i 
    ON a.album_id = i.album_id 
WHERE album_owner = SOME_VALUE 
GROUP BY a.album_id 
+0

您必须对每个选定的字段进行分组。 – wumpz

+0

简单而有效!谢谢! @wumpz这不是MSSQL,所以在这里我不需要。那么,它的工作原理如此.. – Aborted

0

不进行分组的解决方案是一个相关查询:

SELECT a.album_id, a.album_name, a.album_preview, a.album_owner, a.album_time, a.album_access, 
(select COUNT(*) from imgzer_images i where a.album_id = i.album_id) AS images 
FROM imgzer_albums a 
WHERE album_owner = SOME_VALUE 
相关问题