ホームページ > データベース > mysql チュートリアル > MySQL テーブル内の複数のカテゴリに属する​​項目を効率的に選択する方法

MySQL テーブル内の複数のカテゴリに属する​​項目を効率的に選択する方法

Patricia Arquette
リリース: 2024-10-31 04:11:31
オリジナル
374 人が閲覧しました

How to Efficiently Select Items Belonging to Multiple Categories in a MySQL Table?

複数のカテゴリのアイテムの識別

問題:

関連情報を含む MySQL テーブル内(item_id と category_id)、目標は、指定されたカテゴリのセットに存在するアイテムのみを選択することです。

例:

テーブルがある場合:

+-----------------------+
| item_id | category_id |
+-----------------------+
|   1     |    200      |
|   1     |    201      |
|   1     |    202      |
|   2     |    201      |
|   2     |    202      |
|   3     |    202      |
|   3     |    203      |
|   4     |    201      |
|   4     |    207      |
+-----------------------+
ログイン後にコピー

カテゴリ ID 201 と 202 が渡された場合、両方のカテゴリに存在する唯一のアイテムであるため、クエリはアイテム 1 と 2 のみを返す必要があります。

解決策 1: Self -結合

SELECT c1.item_id
FROM item_category AS c1
INNER JOIN item_category AS c2 ON c1.item_id = c2.item_id
WHERE c1.category_id = 201 AND c2.category_id = 202
ログイン後にコピー

この手法では、テーブルのデカルト積を作成する自己結合が必要ですが、大規模なデータセットの場合は非効率となる可能性があります。

解決策 2: GROUP BY と HAVING

SELECT c.item_id, COUNT(*) AS cat_count
FROM item_category AS c
WHERE c.category_id IN (201,202)
GROUP BY c.item_id
HAVING cat_count = 2
ログイン後にコピー

このソリューションは、GROUP BY と HAVING を使用して各項目のカテゴリ数を数え、指定されたセットに一致するカテゴリを除外します。データセットが大きいほどパフォーマンスが向上します。

以上がMySQL テーブル内の複数のカテゴリに属する​​項目を効率的に選択する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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