mysql 정렬 질문입니다. 채택완료
| 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개
</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개
댓글을 작성하려면 로그인이 필요합니다.
ORDER BY IFNULL(`updatedDatetime`, `createdDatetime`) DESC
이렇게 하시면 되지 않을까요?
댓글을 작성하려면 로그인이 필요합니다.
이게 맞는 방법인지는 모르겠지만
생성 시 createdDatetime, updatedDatetime 둘 다 데이터를 넣는 방향으로 해결했습니다.
댓글을 작성하려면 로그인이 필요합니다.
답변에 대한 댓글 2개
이렇게 하면 updatedDatetime null인 데이터가 가장 아래로 내려가 최근에 등록했지만 수정한 기록이 없다면 가장 아래로 내려갑니다.
원하는 순서는 5-2-3-1-4 순인데
위와 같이 정렬한다면 2-3-5-1-4 로 나와요
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
[code]
SELECT * FROM `zoo1` WHERE 1
ORDER BY
CASE
WHEN `updatedDatetime` IS NULL THEN `createdDatetime`
ELSE `updatedDatetime`
END DESC
[/code]
좀 수정해서 저는 이렇게 사용합니다.