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 두 항목을 하나의 항목처럼 만들어서 정렬을 시키고 싶은데 어떻게 해야 가능할까요 ㅠ
ORDER BY (CASE createdDatetime WHEN NULL THEN updatedDatetime
else updatedDatetime) desc
이런식으로 접근했지만 문법이 틀렸어요 ㅠ
답변 4개
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;
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);
INSERT INTO `zoo1` VALUES(5, '2021-02-08 14:46:26', NULL);
SELECT * FROM `zoo1` WHERE 1
ORDER BY
CASE
WHEN `updatedDatetime` IS NULL THEN 1
ELSE 0
END,
`updatedDatetime` DESC,
`createdDatetime` DESC
// 2-3-5-1-4
답변에 대한 댓글 1개
댓글을 작성하려면 로그인이 필요합니다.
ORDER BY IFNULL(`updatedDatetime`, `createdDatetime`) DESC
이렇게 하시면 되지 않을까요?
댓글을 작성하려면 로그인이 필요합니다.
이게 맞는 방법인지는 모르겠지만
생성 시 createdDatetime, updatedDatetime 둘 다 데이터를 넣는 방향으로 해결했습니다.
댓글을 작성하려면 로그인이 필요합니다.
order by updateDatetime desc, createdDatetime desc
order by를 이렇게 같이 해보세요
답변에 대한 댓글 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]
좀 수정해서 저는 이렇게 사용합니다.