Spring

12.14.(수) Spring Framework(19): 게시판 기능(4)

콜라든포비 2022. 12. 17. 21:58

게시판 목록 페이지

쿼리문 작성

글을 작성했으니 게시판 목록에 페이지를 나누고 검색해볼 것이다.

우선 페이징하고 검색할 글이 있어야하니 무작위 글을 35개 이상 만들자.

SELECT postno, subject, username, hitcount, to_char(regdate, 'MM-DD HH:MI') regdate 
FROM board_tbl ORDER BY postno DESC

이 쿼리문을 통해 우리가 표시해야할 글 목록을 확인할 수 있다.

페이징을 할때, 글 고유번호로 인식을 하면 board_seq로 생성된 번호라서 중간에 비게되는 숫자가 발생한다.

따라서 고유번호가 아닌, 모든 글을 select했을때 자동으로 매겨지는 rownum(열 번호)으로 잘라줘야한다.

글을 5개씩 잘라서 한 페이지를 만들어보자. 주의할 점은 rownum은 비교연산자 중 <= 밖에 사용하지 못한다는 점이다.

SELECT postno, subject FROM board_tbl ORDER BY postno DESC;

이렇게 선택한 목록에서 고유번호에 상관없이 맨 위에 있는 글 5개를 불러오려면,

SELECT * FROM (SELECT postno, subject FROM board_tbl ORDER BY postno DESC)
WHERE rownum<=5 ORDER BY postno DESC;

서브쿼리를 이용하여 뽑아올 수 있다.

 

만약 4번째 페이지를 보고 싶다면 어떻게하면 될까?

4번째 페이지는 게시판 글을 최근 작성순서로 나열했을 때 16번째 글부터 20번째 글을 표시해야한다.

SELECT * FROM (SELECT postno, subject FROM board_tbl ORDER BY postno DESC)
WHERE rownum<=5*4 ORDER BY postno DESC;

앞서 말했다시피, rownum에는 <= 밖에 못 쓰기 때문에, 1~20까지 선택할 수 밖에 없다.

그럼 우린 위 결과물을 순서를 오름차순으로 나열한 다음, 맨 위의 5개만 선택하면 된다.

SELECT * FROM 
	(SELECT * FROM 
		(SELECT postno, subject FROM board_tbl ORDER BY postno DESC) 
	WHERE rownum<=5*4 ORDER BY postno ASC) 
WHERE rownum<=5 ORDER BY postno DESC;

이렇게 원하는 페이지에 해당하는 글을 가져오는 쿼리문을 작성했다.