MySQL ORDER BY CASE 문 문제: 여러 타임스탬프 열 정렬
MySQL에서 ORDER BY 절은 일반적으로 다음의 결과를 정렬하는 데 사용됩니다. 특정 열을 기반으로 한 쿼리입니다. 그러나 조건부로 정렬해야 하는 여러 열을 처리할 때 일반적인 문제가 발생합니다.
다음 시나리오를 고려해보세요. 다음과 같은 구조를 가진 데이터베이스 테이블이 있습니다.
------------------------------------------------------------------- | id_one | id_two | timestamp_one | timestamp_two | ------------------------------------------------------------------- | 27 | 35 | 9:30 | NULL | ------------------------------------------------------------------- | 35 | 27 | NULL | 9:35 | ------------------------------------------------------------------- | 27 | 35 | 9:34 | NULL | ------------------------------------------------------------------- | 35 | 27 | NULL | 9:33 | -------------------------------------------------------------------
목표는 특정 조건을 고려하면서 4개 행을 모두 검색하고 timestamp_one 및 timestamp_two를 기준으로 순서를 지정하는 것입니다. 특히 id_one이 27이면 행은 timestamp_one을 기준으로 정렬되어야 합니다. 그렇지 않고 id_two가 27이면 timestamp_two를 기준으로 정렬해야 합니다.
이를 달성하기 위해 다음과 같이 ORDER BY 절에 CASE 문을 사용하려는 시도가 많이 있습니다.
SELECT * FROM tablename WHERE id_one=27 OR id_two=27 ORDER BY CASE WHEN id_one=27 THEN timestamp_one END DESC, CASE WHEN id_two=27 THEN timestamp_two END DESC
이 접근 방식은 개별 행에 대해 원하는 순서를 산출하지만 두 개의 타임스탬프 열을 단일 엔터티로 간주하지 않기 때문에 통합된 순서로 결합하지 못합니다.
해결책:
원하는 대로 행의 순서를 지정하려면 ORDER BY 절에 CASE 문의 수정된 버전을 사용할 수 있습니다.
SELECT id_one, id_two, timestamp_one, timestamp_two FROM tablename WHERE id_one = 27 OR id_two = 27 ORDER BY CASE WHEN id_one=27 THEN timestamp_one WHEN id_two=27 THEN timestamp_two END DESC
이 수정에서는 timestamp_one과 timestamp_two를 모두 단일 엔터티로 처리하고 행의 순서를 지정합니다. 따라서. CASE 문은 WHERE 절에 지정된 조건에 따라 두 타임스탬프 열에 내림차순을 할당하여 행이 전체적으로 정렬되도록 합니다.
위 내용은 조건부 정렬을 사용하여 여러 타임스탬프 열을 기반으로 MySQL 행을 정렬하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!