Одним запросом это лучше не делать - производительного решения не встречал. Делай 2-мя запросами, сначала достать галереи, которые были изменены последними, потом склеить 3 запроса через UNION ALL и получить фотки.
Получение галерей.
1. Когда галерей не много (до нескольких сотен), а фоток в них много:
Код:
SELECT id FROM
(
SELECT g.id, (SELECT add_time FROM photo WHERE id_gallery=g.id ORDER BY add_time DESC LIMIT 1) AS add_time
FROM gallery AS g
) AS t
ORDER BY add_time DESC
LIMIT 3
индекс (id_gallery,add_time)
2. ну если галерей много, то я бы ввёл денормализацию - дополнитьельное поле в таблицу gallery, которое бы содержало дату последнего обновления и по нему выбирал последние 3 галереи.