테스트 사이트 - 개발 중인 베타 버전입니다

mysql 정렬 질문입니다. 채택완료

라균 4년 전 조회 2,052

 

id createdDatetime updatedDatetime
1 2021-01-21 18:02:11 NULL
2 2021-02-08 14:44:39 2021-02-08 14:46:25
3 2021-01-21 17:44:43 2021-01-22 16:04:21
4 2021-01-21 17:44:43 NULL

 

1,4번은 생성 이후 수정하지 않아서 updatedDatetime이 null인 상태입니다. 

정렬순서를 2-3-1-4 이런 순으로 하고 싶습니다. 

updatedDatetime, createdDatetime 두 항목을 하나의 항목처럼 만들어서 정렬을 시키고 싶은데 어떻게 해야 가능할까요 ㅠ

</p>

<pre>
ORDER BY (CASE createdDatetime WHEN NULL THEN updatedDatetime
  else updatedDatetime) desc</pre>

<p>

이런식으로 접근했지만 문법이 틀렸어요 ㅠ

댓글을 작성하려면 로그인이 필요합니다.

답변 4개

채택된 답변
+20 포인트
Big1
4년 전

</p>

<p>CREATE TABLE IF NOT EXISTS `zoo1` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `createdDatetime` datetime DEFAULT NULL,

  `updatedDatetime` datetime DEFAULT NULL,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;</p>

<p>

INSERT INTO `zoo1` VALUES(1, '2021-01-21 18:02:11', NULL);

INSERT INTO `zoo1` VALUES(2, '2021-02-08 14:44:39', '2021-02-08 14:46:25');

INSERT INTO `zoo1` VALUES(3, '2021-01-21 17:44:43', '2021-01-22 16:04:21');

INSERT INTO `zoo1` VALUES(4, '2021-01-21 17:44:43', NULL);</p>

<p>INSERT INTO `zoo1` VALUES(5, '2021-02-08 14:46:26', NULL);</p>

<p>

 

</p>

<p>SELECT * FROM `zoo1` WHERE 1 

ORDER BY 

CASE  

    WHEN `updatedDatetime` IS NULL THEN 1

    ELSE 0

    END,</p>

<p>`updatedDatetime` DESC,

`createdDatetime` DESC</p>

<p>// 2-3-5-1-4</p>

<p>

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

라균
4년 전
아 이런 정렬방식 사용하고있으면서 생각으로 못하고 있었네요 ㄷㄷ
[code]
SELECT * FROM `zoo1` WHERE 1
ORDER BY
CASE
WHEN `updatedDatetime` IS NULL THEN `createdDatetime`
ELSE `updatedDatetime`
END DESC
[/code]
좀 수정해서 저는 이렇게 사용합니다.

댓글을 작성하려면 로그인이 필요합니다.

ORDER BY IFNULL(`updatedDatetime`, `createdDatetime`) DESC

이렇게 하시면 되지 않을까요?

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

라균
4년 전

이게 맞는 방법인지는 모르겠지만

생성 시 createdDatetime, updatedDatetime 둘 다 데이터를 넣는 방향으로 해결했습니다.

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

order by updateDatetime desc, createdDatetime desc

 

order by를 이렇게 같이 해보세요

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

라균
4년 전
우선 답변 감사합니다.
이렇게 하면 updatedDatetime null인 데이터가 가장 아래로 내려가 최근에 등록했지만 수정한 기록이 없다면 가장 아래로 내려갑니다.
라균
4년 전
만약 5번 데이터로 createDatetime = 2021-02-10 10:00:00 updateDatetime = null 로 생성되었다면
원하는 순서는 5-2-3-1-4 순인데
위와 같이 정렬한다면 2-3-5-1-4 로 나와요

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인