Make Be BackEnd

[Test] 댓글에 대한 구현... 댓글,대댓글->무한댓글 본문

ETC

[Test] 댓글에 대한 구현... 댓글,대댓글->무한댓글

Initsave 2024. 6. 18. 13:18

 

현상

MySQL 에서 대댓글까지 2래밸만 가능했다.. 3래밸로 했을때 정렬이 제대로 되지 않는다

 

Test 계획

무한댓글이 가능하도록 시도해보자..!!

 

해결

https://initsave.tistory.com/386

 

[MySQL] 계층 쿼리 (hierarchical query)

계층 쿼리란 무엇일까? 주로 트리 구조 데이터를 쿼리하는데 사용되며, 재귀쿼리(자기 자신을 반복적으로 참조, 부모-자식 참조)의 일종으로 계층적 데이터를 처리하는 쿼리이다. (이전 포스팅

initsave.tistory.com

 

기존 MySQL 에서 CTE 방법을 참고 해서 무한댓글 처리 !

WITH RECURSIVE commentSort AS (
    SELECT CAST(LPAD(comment_seq, 5, '0') AS CHAR(100)) AS cs,
           comment_seq,
           parent_comment_seq,
           content,
           board_seq,
           board_type_seq,
           reg_dtm,
           update_dtm,
           delete_dtm,
           member_seq,
           0 AS lvl
      FROM board_comment
     WHERE parent_comment_seq IS NULL        
 UNION ALL
    SELECT CONCAT(cs.cs, '.', LPAD(bc.comment_seq, 5, '0')) AS cs,
           bc.comment_seq,
           bc.parent_comment_seq,
           bc.content,
           bc.board_seq,
           bc.board_type_seq,
           bc.reg_dtm,
           bc.update_dtm,
           bc.delete_dtm,
           bc.member_seq,
           cs.lvl + 1
      FROM board_comment bc
INNER JOIN commentSort cs ON bc.parent_comment_seq = cs.comment_seq)
    SELECT cs.comment_seq,
           cs.lvl,
           cs.content,
           cs.board_seq,
           cs.board_type_seq,
           cs.member_seq,
           cs.parent_comment_seq AS parent_seq,
           cs.content,
           cs.update_dtm,
           cs.delete_dtm,
           m.member_nm
      FROM commentSort cs
      JOIN member m ON cs.member_seq = m.member_seq
     WHERE cs.board_type_seq = #{boardTypeSeq}
      AND cs.board_seq = #{boardSeq}
 ORDER BY cs.cs;

 

 

소요 시간은 588(ms).. 아직 쿼리양이 얼마 되지 않아서 성능적인 부분은 확신이 없지만 대대대대대댓글을 하는 방식을 이번시간을 통해서 고민해볼 수  있었다.