ホームページ >データベース >mysql チュートリアル >MySQL テーブル内の複数のカテゴリに属する項目を効率的に選択する方法
複数のカテゴリのアイテムの識別
問題:
関連情報を含む 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 サイトの他の関連記事を参照してください。