0

次の形式のテーブルがあります: t_news

  • ID
  • 題名

各ニュースのカテゴリは一貫していません。つまり、最初の 2 つのニュースの最初のカテゴリ、次に 3 番目、5 番目のカテゴリなどです。

日付順に並べ替えて、カテゴリごとに 5 つのニュースを取得する必要があります。

出力は次のようになります (例、ニュース 3、カテゴリ 3)

id title  cat
1  News1  1
2  News2  1
3  News3  1
4  News4  2
5  News5  2
6  News6  2
7  News7  3
8  News8  3
9  News9  3
4

2 に答える 2

2

MySQL では、変数を使用して行番号列を作成できます。

SELECT  id, title, cat
FROM    (   SELECT  id,
                    title,
                    cat,
                    @r:=IF(@cat = cat, @r+1, 1) AS RowNum , 
                    @cat:= cat AS Cat2 
            FROM    t_news,
                    (SELECT @cat:= 0) AS cat,
                    (SELECT @r:= 0) AS r
            ORDER BY cat, id
        ) t
WHERE   RowNum <= 5;

cat 列が @cat 変数 (前の行から設定) と同じ場合、キーは各行にあり、行番号は 1 ずつ増加します。それ以外の場合は 0 にリセットされます。インクリメントの順序は、サブクエリの order by 句によって設定されます (投稿したスキーマに日付列が含まれていないため、ID を使用しました)。

SQL Fiddle の例

于 2013-08-12T10:03:31.750 に答える