안녕하세요.
mariadb 5.5버전 사용중입니다.
게시판 데이터입니다.
CID | TITLE | CONTENTS | NOTICEYN | NOTICEDATE |
1 | 제목1 | 내용1 | Y | 20221109 |
2 | 제목2 | 내용2 | N | |
3 | 제목3 | 내용3 | Y | 20221109 |
4 | 제목4 | 내용4 | N |
위 데이터를 가지고 메인 게시판 정렬부분을 수정하려고 합니다.
1. 공지가 여러개인경우 공지최신글 1건만 최상단에 표시, 1건제외 나머지 CID 로 내림차순 정렬
2. 공지가 없을경우 CID로 내림차순 정렬
3. NOTICEYN이 'Y'라도 NOTICEDATE 날짜가 지나면 공지X
아래 결과값처럼 정렬하고 싶은데 쿼리만으로 가능할까요?
CID | TITLE | CONTENTS | NOTICEYN | NOTICEDATE |
3 | 제목3 | 내용3 | Y | 20221109 |
4 | 제목4 | 내용4 | N | |
2 | 제목2 | 내용2 | N | |
1 | 제목1 | 내용1 | Y | 20221109 |
WITH 문은 테스트 용도입니다. 없다고 생각하고 이하 쿼리 형태만 봐주세요.
마지막 LIMIT 구문 2개는 페이징 쿼리를 염두해 두고 추가했습니다.
WITH bbs AS ( SELECT 1 cid, '제목1' title, '내용1' contents, 'Y' noticeyn, '20221109' noticedate UNION ALL SELECT 2, '제목2', '내용2', 'N', null UNION ALL SELECT 3, '제목3', '내용3', 'Y', '20221109' UNION ALL SELECT 4, '제목4', '내용4', 'N', null ) ( SELECT cid, title, contents, noticeyn, noticedate FROM bbs WHERE noticeyn = 'Y' AND noticedate >= DATE(DATE_ADD(NOW(), INTERVAL 1 DAY)) ORDER BY cid DESC LIMIT 1 ) UNION ALL ( SELECT cid, title, contents, noticeyn, noticedate FROM bbs a WHERE cid != (SELECT cid FROM bbs WHERE noticeyn = 'Y' AND noticedate >= DATE(DATE_ADD(NOW(), INTERVAL 1 DAY)) ORDER BY cid DESC LIMIT 1 ) ORDER BY cid DESC LIMIT 0, 6 ) LIMIT 0, 6 ;