Mysql
 sql >> Database >  >> RDS >> Mysql

mysql seleziona inner join con limit

Puoi usare una query di rango mysql non ha funzioni di finestra per questo tipo di risultati per ottenere n record per gruppo, non suggerirò un group_concat soluzione perché come articles i termini affermano che possono esserci dati sufficienti e aggirare facilmente il vincolo del limite di 1024 caratteri se si aumenta questo limite ha anche una dipendenza da max_allowed_packet anche

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

Sopra classificherà ogni articolo all'interno del suo gruppo di categorie puoi vedere il risultato di rownum alias e nella query esterna basta filtrare i risultati degli articoli su 5 per gruppo di categorie