조건부 정렬을 사용하여 여러 타임스탬프 열을 기반으로 MySQL 행을 정렬하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-11-16 02:37:03
원래의
887명이 탐색했습니다.

How to Order MySQL Rows Based on Multiple Timestamp Columns with Conditional Sorting?

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

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