Du kan använda en rangfråga mysql har inte fönsterfunktioner för den här typen av resultat för att få n poster per grupp, jag kommer inte att föreslå en group_concat
lösning eftersom som articles
termer säger att det kan finnas tillräckligt med data och enkelt passera begränsningen på 1024 tecken om du ökar denna gräns är det också beroende av max_allowed_packet
också
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
Ovan kommer att ranka varje artikel inom i sin kategorigrupp du kan se resultatet av rownum
alias och i yttre fråga filtrerar du bara resultaten av artiklar till 5 per kategorigrupp