识别多个类别中的项目
问题:
在包含关联信息的 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中文网其他相关文章!