소개:
UNION과 결합된 여러 SELECT 문을 사용하여 데이터를 쿼리하는 경우 각 쿼리의 독립성을 유지하면서 제목별로 결과를 적절하게 정렬해야 합니다.
질문:
한 가지 시나리오는 세 개의 SELECT 쿼리가 웹사이트 검색에 대한 서로 다른 거리 기준을 기반으로 데이터를 검색하는 것입니다. 첫 번째 쿼리는 정확한 위치 검색을 위한 데이터를 검색하고, 두 번째 쿼리는 5km 이내의 데이터를 검색하고, 세 번째 쿼리는 5~15km 이내의 데이터를 검색합니다. 쿼리 결과는 UNION을 사용하여 결합되어 제목과 함께 페이지에 표시됩니다. 그러나 사용자는 id 또는 add_date를 기준으로 각 제목 아래에 결과를 정렬하려고 합니다.
해결책:
이를 달성하기 위해 MySQL은 각 SELECT 문에 대해 "rank"라는 유사 열을 도입합니다. 이 의사 열은 다른 정렬 기준을 적용하기 전에 처음에 결과를 정렬하는 데 사용할 수 있습니다. 다음 수정된 쿼리는 이 접근 방식을 보여줍니다.
<code class="language-sql">SELECT * FROM ( SELECT 1 AS Rank, id, add_date FROM Table UNION ALL SELECT 2 AS Rank, id, add_date FROM Table WHERE distance < 5 UNION ALL SELECT 3 AS Rank, id, add_date FROM Table WHERE distance BETWEEN 5 AND 15 ) AS RankedResults ORDER BY Rank ASC, id DESC, add_date DESC;</code>
설명:
유사 열 "Rank": 각 SELECT 문에는 "Rank"라는 유사 열이 도입되고 고유 값(1, 2, 3)이 할당됩니다. 이 열은 결과의 순서 또는 그룹화를 나타냅니다.
초기 "순위" 정렬: UNION 결과는 처음에 "순위" 열을 기준으로 오름차순으로 정렬됩니다. 이렇게 하면 해당 제목("정확한 결과", "5km 이내의 결과" 및 "5-15km 이내의 결과")에 따라 결과가 그룹화됩니다.
"id" 및 "add_date"를 기준으로 추가 정렬: 각 그룹("Rank"로 결정) 내에서 결과는 "id" 및 "add_date"를 기준으로 내림차순으로 추가 정렬됩니다.
참고:
이 방법은 결합된 결과에 중복 행을 포함하는 UNION ALL 연산을 사용합니다. 중복 행이 필요하지 않은 경우 UNION 작업을 사용하여 중복을 제거할 수 있습니다.
위 내용은 MySQL UNION 쿼리의 개별 섹션 내에서 결과를 정렬하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!