조컴퓨터

201030 JSP 10 - JSP 미니 프로젝트 (답변, 검색, 페이징) 본문

자바 웹개발자 과정/JSP

201030 JSP 10 - JSP 미니 프로젝트 (답변, 검색, 페이징)

챠오위 2020. 11. 3. 15:59

답변형 게시판 알고리즘

 

새글쓰기 : 최초의 부모글

답변쓰기 : 자식글

그룹번호(grpno) : 부모글 번호와 동일하게 대입

들여쓰기(indent) : 부모글 들여쓰기+1

글순서(ansnum)  : 부모글 글순서+1, 이후 글 순서 재조정

 

 

번호 제목 그룹번호 들여쓰기 글순서
1 서울시 1 0 0
  ▶종로구 1 1 1
  ▶▶인사동 1 1→2 1→2
  ▶솔데스크 1 2→3 2→3
  ▶탑골공원 1 2→3 3→4
  ▶강남구 1 1 4→5
  ▶역삼동 1 1→2 5→6
2 제주시 2 0 0
3 부산시 3 0 0

 

 

① 글순서 재조정

 

update tb_bbs
set ansnum=ansnum+1
where grpno=1 and ansnum>=3; 

 

 

② 글목록 (인기순, 조회순 등)

 

select * from tb_bbs order by ?;

 

 

전체적인 시스템은 이렇다. 위의 SQL문을 바탕으로 원하는 함수를 만들면 된다.

 

 

 

 

 

게시판 검색

 

예시1) 작성자에서 '솔데스크'가 있는지 검색

 

select * from tb_bbs
where wname like '%솔데스크%';

 

 

예시2) 제목에서 '트럼프'가 있는지 검색

 

select * from tb_bbs
where subject like '%트럼프%';

 

 

예시3) 내용에서 '손흥민'이 있는지 검색

 

select * from tb_bbs
where content like '%손흥민%';

 

 

예시4) 제목 또는 내용에서 '환불'이 있는지 검색

 

select * from tb_bbs
where subject like '%환불%' or content like '%환불%';

 

 

예시5) 갯수 세기

 

select count(col, word) from tb_bbs;

 

 

 

 

 

 

 

페이징

- rownum(줄번호) 활용

 

 

1) 

 

select wname, grpno, ansnum
from tb_bbs
order by grpno desc, ansnum asc;

 

 

2) rownum 추가 : 줄번호까지 정렬됨

 

select rownum, wname, grpno, ansnum
from tb_bbs
order by grpno desc, ansnum asc;

 

 

3) 1)의 SQL문을 셀프조인하고 rownum 추가

 

select rownum, wname, grpno, ansnum
from(
		select wname, grpno, ansnum
		from tb_bbs
		order by grpno desc, ansnum asc
	);

 

 

4) 줄번호 1~5 조회 (1페이지에 해당)

 

select rownum, wname, grpno, ansnum
from(
		select wname, grpno, ansnum
		from tb_bbs
		order by grpno desc, ansnum asc
	)
where rownum>=1 and rownum<=5;

 

 

5) 줄번호 6~10 조회 (2페이지에 해당)

 

select rownum, wname, grpno, ansnum
from(
		select wname, grpno, ansnum
		from tb_bbs
		order by grpno desc, ansnum asc
	)
where rownum>=6 and rownum<=10;

 

※ 5)는 조회가 되지 않는다. 일전에 작성했던 링크 참조 ( ** 추후 링크 첨부 수정  ** )

 

 

6) 줄번호가 있는 3)의 테이블을 한번 더 셀프 조인하고 rownum 칼럼명을 rnum으로 바꾼다.

 

select rnum, wname, grpno, ansnum
from(
	select rownum as rnum, wname, grpno, ansnum
	from(
			select wname, grpno, ansnum
			from tb_bbs
			order by grpno desc, ansnum asc
		)
	) 
where rnum>=6 and rnum<=10;

 

 

7) 페이징 + 검색

 

select rnum, wname, grpno, ansnum
from(
	select rownum as rnum, wname, grpno, ansnum
	from(
			select wname, grpno, ansnum
			from tb_bbs
			where subject like '%솔데스크%'
			order by grpno desc, ansnum asc
		)
	) 
where rnum>=6 and rnum<=10;

 

 

일전에 배웠던 rnum과 동일하다. 같은 논리로 돌아간다. 

 

 

 

응용) 검색한 목록 페이지에서 답변 쓰기를 하고

       목록 페이지로 다시 복귀할 때

       검색한 목록 페이지 그대로 유지하기

 

bbsList.jsp →  bbsRead.jsp → bbsReply.jsp → bbsReplyProc.jsp → bbsList.jsp

한 바퀴 돌 때, col, word를 계속 가지고 있으면 된다. 

 

어떻게 할 것이냐?

① ?col=<%=col%>&word=<%=word%>

② <input type="hidden" name="" value="">

③ location.href='bbsList.jsp?col=" + col + "&word=" + word +"'

위의 세 가지 형식을 이용하여 진행하면 된다.