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