Можете да използвате заявка за ранг mysql няма функции за прозорец за този тип резултати, за да получите n записа на група, няма да предложа group_concat
решение, защото като articles
термините казват, че може да има достатъчно данни и лесно да преминете ограничението за ограничение от 1024 знака, ако увеличите това ограничение, то също има зависимост от max_allowed_packet
също
SELECT * FROM (
SELECT *,
@r:= CASE WHEN @g = c.id THEN @r +1 ELSE 1 END rownum,
@g:= c.id catgroup
FROM category c
JOIN articles a ON (c.id = a,category_id)
CROSS JOIN (SELECT @g:=0,@r:=0) t2
ORDER BY c.id , a.`date` desc
) t
WHERE rownum <= 5
По-горе ще класира всяка статия в нейната група от категории, можете да видите резултата от rownum
псевдоним и във външната заявка просто филтрирайте резултатите от статиите до 5 за група категория