ホームページ > データベース > mysql チュートリアル > 単一の SQL クエリを使用して複数のカテゴリから最新のアイテムを取得するにはどうすればよいですか?

単一の SQL クエリを使用して複数のカテゴリから最新のアイテムを取得するにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-22 02:06:12
オリジナル
669 人が閲覧しました

How Can I Retrieve the Newest Items from Multiple Categories Using a Single SQL Query?

さまざまなカテゴリから最新のアイテムを取得する単一の SQL クエリ

この記事では、単一のデータベース クエリを使用して複数のカテゴリにわたって最新のアイテムを取得し、データベース呼び出しを最小限に抑えるための効率的な SQL ソリューションを紹介します。

SQL ソリューション: 外部結合の活用

「グループごとの最大 n 個」問題は、外部結合を使用してエレガントに解決されます。

<code class="language-sql">SELECT i1.*
FROM item i1
LEFT OUTER JOIN item i2
  ON (i1.category_id = i2.category_id AND i1.item_id < i2.item_id)
GROUP BY i1.item_id
HAVING COUNT(i2.item_id) < 4;</code>
ログイン後にコピー

このクエリは、それぞれのカテゴリ内で新しいアイテムが 4 つ未満のアイテムを効率的に選択します。

説明:

クエリは、各項目 (i1) を、同じカテゴリ内でより高い i2 を持つ (新しいものであることを意味する) 他の項目 (item_id) と結合します。 HAVING 句は、3 つ以上の新しいアイテムを含むアイテムをフィルターで除外し、カテゴリごとに最新の 4 つのアイテムのみを残します。

利点:

  • スケーラビリティ: 任意の数のカテゴリを効果的に処理します。
  • 堅牢性: カテゴリごとのアイテム数が変化したり、カテゴリ構造が変更された場合でも、正しく動作します。

代替アプローチ:

  • MySQL ユーザー変数:

この方法では、MySQL のユーザー定義変数を使用して行番号を割り当て、カテゴリごとに 4 つの最新のアイテムを識別します。 (このアプローチは外部結合方法よりも移植性が低くなります)。

  • ウィンドウ関数 (MySQL 8.0.3 以降):

MySQL 8.0.3 は標準 SQL ウィンドウ関数をサポートし、より簡潔なソリューションを提供します。

<code class="language-sql">WITH numbered_item AS (
  SELECT *, ROW_NUMBER() OVER (PARTITION BY category_id ORDER BY item_id DESC) AS rownum
  FROM item
)
SELECT * FROM numbered_item WHERE rownum <= 4;</code>
ログイン後にコピー

このアプローチでは、アイテムをカテゴリごとにパーティション化し、item_id に基づいて行番号を割り当て (新しいものから降順)、各パーティションから上位 4 行を選択します。

以上が単一の SQL クエリを使用して複数のカテゴリから最新のアイテムを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート