特定の列値を持つ複数の行にまたがる MySQL ID の選択
特定の列内の 2 つ以上の特定の値を満たす項目を識別するには、 MySQL では挑戦的です。次のテーブル構造を考えてみましょう:
+-----------------------+ | item_id | category_id | +-----------------------+ | 1 | 200 | | 1 | 201 | | 1 | 202 | | 2 | 201 | | 2 | 202 | | 3 | 202 | | 3 | 203 | | 4 | 201 | | 4 | 207 | +-----------------------+
目標は、追加のカテゴリに関連付けられている可能性があるにもかかわらず、指定された両方のカテゴリに属する項目のみを選択することです。
効果のないソリューション:
効果的な解決策:
自己結合:
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
このメソッドは、共通の列 (item_id) に基づいて同じテーブルの行を結合し、複数の行とその値の間の比較を可能にします。
GROUP BY:
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 関数を利用して、各 item_id の個別のカテゴリ値の数をカウントします。指定されたカテゴリの数 (この場合は 2) と等しい cat_count を持つ項目が選択されます。
結論:
どちらの方法も、必要な基準を満たす項目を効果的に識別します。 。どちらを選択するかは、特定の要件とデータベースのパフォーマンスに関する考慮事項によって異なります。
以上が行全体で複数の特定の列値を持つ MySQL ID を選択するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。