Mysql
 sql >> Base de données >  >> RDS >> Mysql

mysql select jointure interne avec limite

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