3

ブログ投稿を含むデータベース テーブルがあります。たとえば、日付順など、各カテゴリの 1 つ (または複数) の投稿をホームページに表示したいと考えています。

したがって、投稿テーブルは次のようになります。id | title | description | cat | filename | date

このようなクエリを作成するにはどうすればよいですか? group-by または subselect を使用することを考えましたが、パフォーマンスが向上するかどうかはわかりません...テーブルに多数のレコードがあります。

4

2 に答える 2

5

MySQLは分析関数 (ROW_NUMBER、RANK、DENSE_RANK、NTILE...) をサポートしていませんが、変数を使用して機能をエミュレートできます。

N 個の最新のブログ投稿が必要な場合:

SELECT x.id,
       x.title,
       x.description,
       x.cat,
       x.filename,
       x.date
  FROM (SELECT bp.id,
               bp.title,
               bp.description,
               bp.cat,
               bp.filename,
               bp.date,
               CASE 
                 WHEN bp.cat = @category THEN @rownum := @rownum + 1
                 ELSE @rownum := 1
               END AS rank,
               @category := bp.cat
          FROM BLOG_POSTS bp
          JOIN (SELECT @rownum := 0, @category := NULL) r
      ORDER BY bp.cat, bp.date DESC) x
 WHERE x.rank <= N

ランク 1 を最初のブログ投稿にしたい場合は、ORDER BY を次のように変更します。

ORDER BY bp.cat, bp.date
于 2010-09-30T16:26:35.503 に答える
0

CTE と Windows 関数 (PostgreSQL 9.3 でテスト済みですが、MySQL の最近のバージョンでも動作すると思われます) を使用して、より最新の SQL を使用して、カテゴリごとに 2 つのタイトルを表示します。

WITH b AS
  (SELECT title, cat, row_number() OVER (PARTITION BY cat) as rn FROM BLOGS)
SELECT title, cat FROM b WHERE rn <= 2;
于 2015-03-17T05:25:49.117 に答える