BoardProject 기능 구현이 끝났다.
마지막으로 기능들 체크하는 도중에 찾은 문제점.
Oracle을 사용한 계층형 게시판에서 원글을 삭제하면 답글을 삭제하지 않았음에도 리스트에 출력이 되지 않는다.
SELECT *
FROM (
SELECT ROWNUM AS RNUM, A.*
FROM (
SELECT *
FROM HierarchicalBoard
WHERE BoardNo > 0
<include refid="search"></include>
START WITH BoardUpperNo = 0
CONNECT BY PRIOR BoardNo = BoardUpperNo
ORDER SIBLINGS BY BoardGroupNo DESC
) A
)
WHERE RNUM BETWEEN ${rowStart} AND ${rowEnd}
쿼리문을 이렇게 작성해서 썼는데
START WITH BoardUpperNo=0 으로 작성했기 때문에
UpperNo 가 0인 원글이 존재해야 그 하위에 있는 답글 역시 출력되기 때문이다 ㅠㅠ
그래서 이것저것 알아보니 생각보다 처리방법에 대해 별다르게 적어주신 분이 없었다 ㅠ
보통 원글과 답글을 같이 삭제하거나 아니면 원글을 삭제하는것이 아닌 삭제된 글이라고 UPDATE를 하는 방법을 많이들 사용하셨다.
하지만 원글은 삭제하고 답글만 남겨놓고 싶었기에.... 이래저래 머리를 굴려보니 UpperNo가 0인 원글이 존재하지 않기 때문에 출력이 안된거니까 그럼 바로 밑 Indent 가 1인 답글의 UpperNo를 바꾸면 되지 않을까? 라는 생각이 들어 테스트했다.
원글 삭제 전에 해당 글번호를 UpperNo에 갖고 있는 row를 Count해주고.
그 Count가 0이면 그냥 삭제. 0이 아니라면 UpperNo가 원글의 BoardNo인 row들의 UpperNo를 0으로 Update한 뒤에!
원글을 삭제하도록 했다.
댓글도 있었기에 글 삭제 하나에 댓글삭제, Count, Update, 원글 삭제 이렇게 총 네개의 쿼리문을 사용했지만 일단 원하는 화면은 출력되었다!!!!!
mysql로 만들었을때는 각 컬럼들의 차순을 이용해서 만들었다보니 이런 문제가 없이 그냥 삭제만 해줘도 가능했는데 요고는 조금 쿼리문 자체를 고민을 해봐야하는 문제인것 같다.
삭제할일이 없게 되는 계층형을 출력하게 된다면 편하게 사용할 수 있을 것 같은데 이번처럼 게시판 형태로 삭제가 가능하다면 다른 방식의 쿼리문을 고민해봐야 할 것 같다.
'Project&문제해결' 카테고리의 다른 글
pagination중 type, keyword 값 오류 (0) | 2021.04.16 |
---|---|
Invalid bound statement (not found) 에러 (0) | 2020.12.23 |
BoardProject 11/6 Json Controller로 넘겨서 받기. (0) | 2020.11.06 |
JQuery .append로 button 추가 후 click (0) | 2020.11.05 |
BoardProject 11/4 JSON해결. (0) | 2020.11.04 |