Sie können eine Rangabfrage verwenden, mysql hat keine Fensterfunktionen für diese Art von Ergebnissen, um n Datensätze pro Gruppe zu erhalten, ich werde keinen group_concat vorschlagen Lösung, weil als articles Bedingungen sagt, dass es genug Daten geben kann und die Beschränkung auf 1024 Zeichen leicht umgangen werden kann, wenn Sie diese Grenze erhöhen, es hat auch eine Abhängigkeit von max_allowed_packet
auch
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
Oben wird jeder Artikel innerhalb seiner Kategoriegruppe eingestuft, Sie können das Ergebnis von rownum sehen Alias und in der äußeren Abfrage filtern Sie einfach die Ergebnisse der Artikel auf 5 pro Kategoriegruppe