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

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

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-31 04:11:31316ブラウズ

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。