Поместите критерии объединения с теми соединениями, к которым они принадлежат.Не смешивайте агрегаты (сумма / макс и т. Д. В столбцах) и неагрегаты (поля не в GROUP BY и не в функции ), даже если MySQL позволяет вам
SELECT g.id, g.name, g.date_created, g.date_updated, g.created_by,
c.fullname AS creator_name, g.updated_by, u.fullname AS updater_name, COUNT(i.id) as image_count
FROM gallery_groups g LEFT JOIN
users c ON g.created_by=c.id LEFT JOIN
users u ON g.updated_by=u.id LEFT JOIN
gallery_images i ON i.group=g.id
WHERE g.id = $id
GROUP BY g.id, g.name, g.date_created, g.date_updated, g.created_by,
c.fullname, g.updated_by, u.fullname
ORDER BY g.date_updated DESC, g.name
Поскольку вы группируете практически все остальное, кроме количества изображений, может быть лучше просто запросить, что
SELECT g.id, g.name, g.date_created, g.date_updated, g.created_by,
c.fullname AS creator_name, g.updated_by, u.fullname AS updater_name,
IFNULL((
select COUNT(1)
from gallery_images i
WHERE i.group=g.id), 0) as image_count
FROM gallery_groups g LEFT JOIN
users c ON g.created_by=c.id LEFT JOIN
users u ON g.updated_by=u.id LEFT JOIN
gallery_images i ON i.group=g.id
WHERE g.id = $id
ORDER BY g.date_updated DESC, g.name