>  기사  >  데이터 베이스  >  MySQL 테이블에서 여러 범주에 속하는 항목을 효율적으로 선택하는 방법은 무엇입니까?

MySQL 테이블에서 여러 범주에 속하는 항목을 효율적으로 선택하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-10-31 04:11:31315검색

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으로 문의하세요.