한 게시글의 총 답글 수 구하기
문제 1) 한 게시글의 총 답글 수 구하기
SELECT count(grpno)-1 FROM tb_bbs WHERE grpno = 15; |
한 게시글의 총 답글 수는 그룹번호가 같은 게시글들을 모아서 원본게시물 갯수 (1개)를 빼주면 된다.
그러나 이 방법은 모든 게시물의 답글 갯수를 계산해주지 않는다. 그렇기 때문에
그룹번호로 그룹을 묶어서 수를 세어주어야함.
SELECT grpno, count(grpno) as cnt - 1 FROM tb_bbs GROUP BY grpno |
부모게시글의 제목도 가져오기
답글갯수를 가져오는 가상의 논리테이블 AA를 만들어주고 그것을 물리테이블인 tb_bbs와 inner join 한 후
그룹번호, 답글갯수, 제목, indent를 조회한다. 그렇게만 하면 그룹넘버 중복된 것들이 조회되므로 부모게시물만 조회할 수 있게 WHERE indent = 0 이라는 조건을 달아준다.
SELECT AA.grpno, AA.cnt, tb_bbs.subject, tb_bbs.indent FROM ( SELECT grpno, count(grpno)-1 as CNT FROM tb_bbs GROUP BY grpno ) AA INNER JOIN tb_bbs on AA.grpno = tb_bbs.grpno WHERE indent = 0 ORDER BY AA.grpno DESC; |
목록 중 위에서 5개까지 조회하기
문제 2) 목록 중, 위에서 5개 까지 조회
rownum을 이용해야하는데 어떻게 하는지 모르겠음
rownum<10을 했을때는 List페이지의 뷰대로 나오는데 <5 했을 때는 결과가 다르다.
1) 우선 조회하기
SELECT subject, grpno, ansnum FROM tb_bbs ORDER BY grpno DESC, ansnum ASC; |
2) rownum 붙여서 조회하기
SELECT rownum, subject, grpno, ansnum, bbsno FROM tb_bbs ORDER BY grpno DESC, ansnum ASC; --이렇게 하면 정렬이 뒤죽박죽된다. rownum이 제대로 나오려면 우선 정렬을 하고 글번호를 붙여야한다. |
3) 셀프조인 후 rownum 조회해서 정렬된 rownum 얻기
--3 1의 SQL문을 셀프조인 후 rownum 추가 SELECT rownum, subject, grpno, ansnum FROM ( SELECT subject, grpno, ansnum FROM tb_bbs ORDER BY grpno DESC, ansnum ASC )AA; |
이렇게 하면 정렬된 글번호가 조회가 된다. 1~5의 게시물을 조회하려면 아래와같이 WHERE 조건절을 붙이면된다.
4) rownum이 1~5인 게시글 조회
--4 줄번호 1~5 조회 SELECT rownum, subject, grpno, ansnum FROM ( SELECT subject, grpno, ansnum FROM tb_bbs ORDER BY grpno DESC, ansnum ASC )AA WHERE rownum >=1 AND rownum <=5; |
그런데 이렇게 하면 1~5 는 되는데 그 후의 값을 붙인 조건은 조회가 안된다. 제대로 조회하려면
줄번호가 있는 3의 테이블을 한번 더 셀프조인해야한다.
5) 페이징 조회 SQL문
SELECT rnum, subject, grpno, ansnum FROM( SELECT rownum AS rnum, subject, grpno, ansnum FROM ( SELECT subject, grpno, ansnum FROM tb_bbs ORDER BY grpno DESC, ansnum ASC ) ) WHERE rnum >=11 AND rnum <=16; |
이렇게하면 빨간색 숫자부분을 어느 숫자로 만들어줘도 적용이 잘된다.
검색기능 넣기
페이징 + 검색
--제목에서 '어디' 검색해서 2페이지 출력
SELECT rnum, subject, grpno, ansnum FROM( SELECT rownum AS rnum, subject, grpno, ansnum FROM ( SELECT subject, grpno, ansnum FROM tb_bbs WHERE subject like %어디% ORDER BY grpno DESC, ansnum ASC ) ) WHERE rnum >=1 AND rnum <=10; |
저 사이에 검색조회하는 조건문을 넣어주면 된다.
'Backend' 카테고리의 다른 글
09월 11일 수 | JSP 13 - JSP 미니 프로젝트 Ⅰ- 로그인 (0) | 2019.09.11 |
---|---|
09월 10일 화 | JSP 12 - JSP 미니 프로젝트 Ⅰ- 세션,리퀘스트 (0) | 2019.09.10 |
09월 06일 금 | JSP 10 - JSP 미니 프로젝트 Ⅰ- 답글쓰기 (DB연결) (0) | 2019.09.06 |
09월 04일 수 | JSP 09 - JSP 미니 프로젝트 Ⅰ- 글쓰기 (DB연결) (0) | 2019.09.04 |
09월 03일 화 | JSP 08 - JSP 미니 프로젝트 Ⅰ- 환경설정 (0) | 2019.09.03 |
댓글