오라클에서는 댓글이 있는 게시판 목록 쿼리를 만들때,

CONNECT BY 절을 사용해서 SQL를 작성하는데,

IBM DB2에서는 CONNECT BY를 지원하지 않기 때문에 다른 꼼수를 사용해야 한다.

 

옆자리 개발자가 해결을 못하고 있다고 해서,

그 게시판 목록 조회 SQL을 봐주기로 답변은 덜커덩 했지만,

DB2를 마지막으로 사용해본지가 10년도 넘었으니,

구글을 뒤지던 네이버를 뒤지면 비슷한걸 찾을 수 있겠지라고 쉽게 생각했었다..

 

그런데...

인터넷에서는 내가 필요로 하는 기능요건에 맞는 설명이나 샘플을 찾지 못했다.

 

그래서...

어쩔 수 없이, 이제는 별로 쓸모없어진 내 머리를 믿기로 하고 스스로 쿼리 만들기로 했다.^^

 

그리고...

오랜만에 열업(열심히 업무)해서 예쁘게 만들어냈다. 야호~~~

 

DB2로 게시판 목록 조회 SQL이 필요하신 분은 아래 참조해서 유용하게 쓰세요~~

 

아참, 아래에 적어놓은 내용은

저의 동의없이 맘대로 무한 배포, 복사, 편집, 퍼나르기를 조건없이 환영합니다~

 

그럼, 설명 들어갑니다..

 

1. 게시판 목록 UI의 구현 조건 정의        
(1) 가장 최근의 글이 가장 상단에 나타나야한다(Descend)        
(2) 댓글은 본문글 아래에 오래된 댓글순(Ascend)으로 보여야 한다  
(3) 댓글의 댓글의 깊이는 무한이 계속될 수 있다   
        
2. 게시판 테이블의 칼럼 정의          
(1) GROUP_ID

- 최상위 본글의 BOARD_ID. 본글을 포함하여, 하위의 모든 댓글들은 같은 GROUP_ID를 갖도록 한다.         
(2) PARENT_BOARD_ID

- 직전 상위 글의 BOARD_ID. 최상위 본글 PARENT_BOARD_ID는 DEFAULT값인 0을 갖도록 한다.         
(3) REPLY_DEPTH

- 화면 출력시 들여쓰기의 기준.

- DEFAULT는 0. 최상위 본글은 0이고, 이하 댓글은 직전 상위글의 REPLY_DEPTH에 1을 더한다.        
              
3. 실행 SQL  

--------------------------------------------------------------------------------------------------------

WITH RECURSIVE(RECURSIVE_LEVEL, BOARD_ID, PARENT_BOARD_ID, GROUP_ID, REPLY_DEPTH) AS        
  (      
   SELECT CAST(BOARD_ID AS VARCHAR(100)) AS RECURSIVE_LEVEL,

                BOARD_ID, PARENT_BOARD_ID, GROUP_ID, REPLY_DEPTH      
     FROM BBS_TABLE         
    WHERE BOARD_ID = GROUP_ID              
    UNION ALL      
   SELECT T.RECURSIVE_LEVEL || '.' || T.BOARD_ID AS RECURSIVE_LEVEL,

               C.BOARD_ID, C.PARENT_BOARD_ID, C.GROUP_ID, C.REPLY_DEPTH      
     FROM BBS_TABLE C, RECURSIVE T      
    WHERE C.PARENT_BOARD_ID = T.BOARD_ID      
  )      
   SELECT (RECURSIVE_LEVEL || '.' || BOARD_ID ) as RECURSIVE_LEVEL,

                BOARD_ID, PARENT_BOARD_ID, GROUP_ID, REPLY_DEPTH      
     FROM RECURSIVE A      
    ORDER BY GROUP_ID DESC, RECURSIVE_LEVEL ASC 

--------------------------------------------------------------------------------------------------------

 

※ 자세히 설명을 적었지만,

    혹시라도 다시 설명이 필요한분은 댓글에 질문하시거나,

    이메일로 연락(urajilation@gmail.com) 주시면 부연설명을 해드리겠습니다.

 

From. 부산에서 출장 프로젝트중인 황사마.^^ 

 

Posted by 우라질레이터

urajilation@gmail.com
우라질레이터

달력

태그목록