Vous pouvez utiliser une requête de classement mysql n'a pas de fonctions de fenêtre pour ce type de résultats pour obtenir n enregistrements par groupe, je ne suggérerai pas un group_concat
solution car comme articles
termes dit qu'il peut y avoir suffisamment de données et facilement contourner la contrainte de limite de 1024 caractères si vous augmentez cette limite, il a également une dépendance sur max_allowed_packet
aussi
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
Ci-dessus classera chaque article dans son groupe de catégories, vous pouvez voir le résultat de rownum
alias et dans la requête externe, filtrez simplement les résultats des articles à 5 par groupe de catégories