識別多個類別中的項目
問題:
在包含關聯資訊中的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:自行-Join
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中文網其他相關文章!