sql >> Base de Datos >  >> RDS >> Mysql

mysql seleccione unión interna con límite

Puede usar una consulta de rango mysql no tiene funciones de ventana para este tipo de resultados para obtener n registros por grupo, no sugeriré un group_concat solución porque como articles términos dice que puede haber suficientes datos y pasar fácilmente la restricción del límite de 1024 caracteres si aumenta este límite, también depende de max_allowed_packet también

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

Arriba clasificará cada artículo dentro de su grupo de categoría, puede ver el resultado de rownum alias y en la consulta externa solo filtre los resultados de los artículos a 5 por grupo de categoría