> 데이터 베이스 > MySQL 튜토리얼 > 단일 SQL 쿼리를 사용하여 여러 범주에서 최신 항목을 검색하려면 어떻게 해야 합니까?

단일 SQL 쿼리를 사용하여 여러 범주에서 최신 항목을 검색하려면 어떻게 해야 합니까?

Linda Hamilton
풀어 주다: 2025-01-22 02:06:12
원래의
732명이 탐색했습니다.

How Can I Retrieve the Newest Items from Multiple Categories Using a Single SQL Query?

다양한 카테고리에서 최신 항목을 검색하는 단일 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 사용자 변수:

이 방법은 MySQL의 사용자 정의 변수를 사용하여 행 번호를 할당하고 카테고리별로 4개의 최신 항목을 식별합니다. (이 접근 방식은 외부 조인 방법보다 이식성이 떨어집니다.)

  • 창 함수(MySQL 8.0.3 이상):

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿