Mysql
 sql >> Datenbank >  >> RDS >> Mysql

mysql select inner join with limit

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