首页  >  文章  >  数据库  >  如何高效地选择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:自行-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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn