Итак, у меня есть таблица альбомов и изображений. У изображений есть столбец с именем album_id, в котором указывается идентификатор альбома, в котором они находятся. Все идет нормально.

Теперь мне нужно выбрать информацию из таблицы альбомов, и мне также нужно количество изображений для каждой строки альбома. Я пробовал использовать LEFT JOIN и COUNT(*), но он вернул бы только одну строку, что в моем случае крайне неэффективно.

Это исходный запрос, который я использую, который не вернет ничего, связанного с подсчетом:

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

Как получить количество изображений для каждого соответствующего идентификатора альбома, не ограничиваясь только одним результатом?

1
aborted 5 Мар 2014 в 00:39

2 ответа

Лучший ответ

Попробуй это

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
Md. Sahadat Hossain 4 Мар 2014 в 20:46

Решение без группировки - это коррелированный запрос:

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
0
Jayvee 4 Мар 2014 в 20:49