Есть таблицы photos и albums. Нужно выбрать список альбомов и + по одной фотографии для каждого (любая случайная фотка). Ничего умнее чем группировать по album_id не придумал:
SELECT * FROM albums
LEFT JOIN photos ON (albums.album_id=photos.photo_id)
GROUP BY albums.album_id
Получается, что сначала будут выбраны все записи из photos, сделается join с albums, потом сгруппируются. Громоздко как-то.
Ещё можно, конечно, добавить в albums поле, типа main_photo_id и держать там значение фотки. Просто может есть проще вариант?
Мне кажется, что вот это
…
(albums.album_id=photos.photo_id)
вообще ничего не должно выдать. Должно быть вот так:
SELECT * FROM albums
LEFT JOIN photos ON (photos.album_id=albums.album_id)
GROUP BY albums.album_id
Но этот запрос будет всегда выдавать первую добавленную картинку, а не случайную.
А вот если нужна случайная картинка для альбома, тогда лучше сделать так:
SELECT * FROM albums as a
LEFT JOIN (SELECT DISTINCT * FROM photos ORDER BY RAND()) as p ON (p.album_id=a.album_id)
GROUP BY a.album_id