이 포스팅은 날짜를 포맷팅하는 함수인 DATE_FORMAT()과 기간을 더하는 함수인 DATE_ADD(), JOIN의 사용에 대해 기록하기 위한 목적!
신규 프로젝트 1차 개발 업무를 마무리하고, 2차 개발에서는 알림 설정과 알림 메시지를 관리하는 게시판을 개발하게 되었다. 본격적인 업무 시작에 앞서, 사용자가 앱에 올라오는 새로운 컨텐츠에 대한 알림을 받기로 설정했을 때 최근 n기간 내에 등록된 새 글만 조회되도록 하는 쿼리를 짜보았다. 컨텐츠 내의 게시글의 삭제 여부와 게시글이 사용자 화면에 노출되는지, 노출되는 기간을 설정했을 경우까지 체크하여 가져온다. 점심 먹고 2시간동안 머리를 굴려 굴려 짠 결과는 아래에..
게시글 순번(NTEC_SN), 등록일자(REGIST_DT), 컨텐츠 아이디(CNTNTS_ID), 컨텐츠 이름(CNTNTS_NM), 게시글 제목(NTCE_SJ), 상태(STTUS), 노출 여부(PD_EXPSR_POSBL), 시작일(BGNDE), 종료일(ENDDE)
SELECT NTCE_SN, REGIST_DT, tb_layout.CNTNTS_ID, CNTNTS_NM, NTCE_SJ
FROM tb_layout INNER JOIN tb_layout_cntnts
ON tb_layout.CNTNTS_ID = tb_layout_cntnts.CNTNTS_ID
WHERE REGIST_DT > DATE_ADD(NOW(), INTERVAL - 6 MONTH)
AND tb_layout.STTUS = 1
AND (
tb_layout.PD_EXPSR_POSBL = false
OR
(
tb_layout.PD_EXPSR_POSBL = true
AND
(
(
DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i') BETWEEN DATE_FORMAT(tb_layout.BGNDE, '%Y-%m-%d %H:%i') AND DATE_FORMAT(tb_layout.ENDDE, '%Y-%m-%d %H:%i')
AND tb_layout.BGNDE IS NOT NULL AND tb_layout.endde IS NOT NULL
)
OR
(
DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i') >= DATE_FORMAT(tb_layout.BGNDE, '%Y-%m-%d %H:%i') AND tb_layout.BGNDE IS NOT NULL AND tb_layout.ENDDE IS NULL
)
OR
(
DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i') <= DATE_FORMAT(tb_layout.endde, '%Y-%m-%d %H:%i') AND tb_layout.BGNDE IS NULL AND tb_layout.ENDDE IS NOT NULL
)
)
)
)
ORDER BY REGIST_DT ASC;