JOIN'ить с готовыми группировками.
SELECT `e`.`id`, `e`.`name` as `event_name`, `e`.`country_id`, `e`.`description`,
`c`.`name` as `country_name`, `l`.`links`, `i`.`images`
FROM `events` AS `e`
JOIN `countries` AS `c`
ON `c`.`id` = `e`.`country_id`
LEFT JOIN (
SELECT `event_id`, GROUP_CONCAT(`link`) AS `links`
FROM `links`
GROUP BY `event_id`
) AS `l`
ON `l`.`event_id` = `e`.`id`
LEFT JOIN (
SELECT `event_id`, GROUP_CONCAT(`name`) AS `images`
FROM `images`
GROUP BY `event_id`
) AS `i`
ON `i`.`event_id` = `e`.`id`
ORDER BY `e`.`id` DESC
LIMIT :start, :max
Оно и логически правильнее, ваша конструкция под строгий вариант SQL не пройдёт, в ней есть группировка, но некоторые поля выборки и не присутствуют в выражении GROUP BY, и по ним нет агрегатной функции.