ランククエリを使用できます。mysqlにはこのタイプの結果のウィンドウ関数がなく、グループごとにn個のレコードを取得できます。group_concat
は提案しません。 articles
としての解決策 用語によると、十分なデータがあり、1024文字の制限制約を簡単に渡すことができます。この制限を増やすと、 max_allowed_packet
あまりにも
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
上記は、rownum
の結果を確認できるカテゴリグループ内の各記事をランク付けします。 エイリアスと外部クエリでは、記事の結果をカテゴリグループごとに5つにフィルタリングするだけです