Spring - 게시판 댓글

맑은 눈의 코드 👀·2023년 8월 30일
0

06_framework 이론

목록 보기
21/23
post-custom-banner

부모 댓글 자식 댓글 구현

게시판에 아래와 같이 댓글과 그 댓글 의 답글을 다는 코드를 구현해 보려고 한다.
결과 화면은 아래와 같다

🫧DB 데이터 입력

기능 구현에 필요한 더미 데이터를 입력해 보자

현재 게시글 번호가 '1506'인 게시글에는 댓글이 없다
댓글을 넣어주자

SELECT COMMENT_NO, COMMENT_CONTENT,
    TO_CHAR(C_CREATE_DATE, 'YYYY"년" MM"월" DD"일" HH24"시" MI"분" SS"초"')C_CREATE_DATE,
    BOARD_NO, MEMBER_NO, MEMBER_NICKNAME, PROFILE_IMG, PARENT_NO, COMMENT_DEL_FL
FROM "COMMENT"
JOIN MEMBER USING(MEMBER_NO)
WHERE BOARD_NO = 1506
ORDER BY COMMENT_NO;

부모 댓글 2개 INSERT하기

INSERT INTO "COMMENT"
VALUES(SEQ_COMMENT_NO.NEXTVAL, '부모 댓글1', DEFAULT, DEFAULT, 1506, 1, NULL);
INSERT INTO "COMMENT"                                     -- 
VALUES(SEQ_COMMENT_NO.NEXTVAL, '부모 댓글2', DEFAULT, DEFAULT, 1506, 1, NULL);

하위 자식 댓글 INSERT하기

INSERT INTO "COMMENT"                                     -- 게시글, 회원
VALUES(SEQ_COMMENT_NO.NEXTVAL, '자식 댓글1-1', DEFAULT, DEFAULT, 1506, 1, 1022);
INSERT INTO "COMMENT"                                     -- 게시글, 회원
VALUES(SEQ_COMMENT_NO.NEXTVAL, '자식 댓글1-2', DEFAULT, DEFAULT, 1506, 1, 1022);
INSERT INTO "COMMENT"                                     -- 게시글, 회원
VALUES(SEQ_COMMENT_NO.NEXTVAL, '자식 댓글1-3', DEFAULT, DEFAULT, 1506, 1, 1022);
---------------------------
INSERT INTO "COMMENT"                                     -- 게시글, 회원
VALUES(SEQ_COMMENT_NO.NEXTVAL, '자식 댓글2-1', DEFAULT, DEFAULT, 1506, 1, 1023);
INSERT INTO "COMMENT"                                     -- 게시글, 회원
VALUES(SEQ_COMMENT_NO.NEXTVAL, '자식 댓글2-2', DEFAULT, DEFAULT, 1506, 1, 1023);
INSERT INTO "COMMENT"                                     -- 게시글, 회원
VALUES(SEQ_COMMENT_NO.NEXTVAL, '자식 댓글2-3', DEFAULT, DEFAULT, 1506, 1, 1023);


🫧DB입력이 끝났으면 조회을 해보자!

계층형 쿼리 조회하기
계층형 쿼리(START WITH, CONNECT BY, ORDER SIBLINGS BY)
- 상위 타입과 하위 타입간의 관계를 계층식으로 표현 할 수 있게 하는 질의어(SELECT)


- START WITH : 상위 타입(최상위 부모)으로 사용될 행을 지정 (서브쿼리로 지정 가능)


- CONNECT BY
-> 상위 타입과 하위 타입 사이의 관계를 규정
-> PRIOR(이전의) 연산자와 같이 사용하여
현재 행 이전에 상위 타입 또는 하위 타입이 있을지 규정


1) 부모 -> 자식 계층 구조
CONNECT BY PRIOR 자식 컬럼 = 부모 컬럼
2) 자식 -> 부모 계층 구조
CONNECT BY PRIOR 부모 컬럼 = 자식 컬럼


- ORDER SIBLINGS BY : 계층 구조 정렬


계층형 쿼리가 적용 SELECT 해석 순서


5 : SELECT
1 : FROM (+JOIN)
4 : WHERE
2 : START WITH
3 : CONNECT BY
6 : ORDER SIBLINGS BY


- WHERE절의 계층형 쿼리 보다 순서가 늦기 때문에
먼저 조건을 반영하고 싶은 경우 FROM절 서브쿼리(인라인뷰)을 이용

	 SELECT LEVEL, C.* FROM 
      (SELECT COMMENT_NO, COMMENT_CONTENT,
          TO_CHAR(C_CREATE_DATE, 'YYYY"년" MM"월" DD"일" HH24"시" MI"분" SS"초"')C_CREATE_DATE,
          BOARD_NO, MEMBER_NO, MEMBER_NICKNAME, PROFILE_IMG, PARENT_NO, COMMENT_DEL_FL
      FROM "COMMENT"
      JOIN MEMBER USING(MEMBER_NO)
      WHERE BOARD_NO = 1507) C
      WHERE COMMENT_DEL_FL='N'
      START WITH PARENT_NO IS NULL
      CONNECT BY PRIOR COMMENT_NO= PARENT_NO 
      ORDER SIBLINGS BY COMMENT_NO
;
profile
나를 죽이지 못하는 오류는 내 코드를 더 강하게 만들지ㅋ
post-custom-banner

0개의 댓글