안녕하세요.
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
;
다시 생각해 보니 답변의 페이지 쿼리에 문제가 있네요.
탑에 올라갈 공지가 있을 수도 있고 없을 수도 있는데.
그에 따라 LIMIT 의 숫자가 영향을 받아 조정이 되야 할 수 있겠네요.
공지가 매 페이지마다 반복되어 나올지 첫페이지에 한번만 나올지도 생각해야 하고
정확한 페이징 기준이 있는지? 아니면 페이징은 아예 없는지?
6개 고정이면 그대로 사용하면 될 듯 하네요.
LIMIT 0, 6 또는 LIMIT 6
답변 감사합니다.
답변이 없는 게시글이고 페이징도 없습니다. 6개까지 고정으로 표시가 됩니다