다양한 카테고리에서 최신 항목을 검색하는 단일 SQL 쿼리
이 기사에서는 데이터베이스 호출을 최소화하면서 단일 데이터베이스 쿼리를 사용하여 여러 카테고리에 걸쳐 최신 항목을 검색할 수 있는 효율적인 SQL 솔루션을 제시합니다.
SQL 솔루션: 외부 조인 활용
"그룹당 가장 큰 n개" 문제는 외부 조인을 사용하여 우아하게 해결됩니다.
SELECT i1.* FROM item i1 LEFT OUTER JOIN item i2 ON (i1.category_id = i2.category_id AND i1.item_id < i2.item_id) GROUP BY i1.item_id HAVING COUNT(i2.item_id) < 4;
이 쿼리는 해당 카테고리 내에서 최신 항목이 4개 미만인 항목을 효율적으로 선택합니다.
설명:
쿼리는 동일한 카테고리에서 각 항목(i1
)을 더 높은 i2
(더 새로운 항목임을 의미)을 갖는 다른 항목(item_id
)과 조인합니다. HAVING
절은 3개 이상의 최신 항목이 포함된 항목을 필터링하여 카테고리별로 가장 최근 항목 4개만 남깁니다.
장점:
대체 접근 방식:
이 방법은 MySQL의 사용자 정의 변수를 사용하여 행 번호를 할당하고 카테고리별로 4개의 최신 항목을 식별합니다. (이 접근 방식은 외부 조인 방법보다 이식성이 떨어집니다.)
MySQL 8.0.3은 표준 SQL 창 기능을 지원하여 보다 간결한 솔루션을 제공합니다.
WITH numbered_item AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY category_id ORDER BY item_id DESC) AS rownum FROM item ) SELECT * FROM numbered_item WHERE rownum <= 4;
이 접근 방식은 항목을 카테고리별로 분할하고 item_id
을 기준으로 행 번호를 할당한 다음(최신 항목부터 내림차순) 각 파티션에서 상위 4개 행을 선택합니다.
위 내용은 단일 SQL 쿼리를 사용하여 여러 범주에서 최신 항목을 검색하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!