게시판2개를 하나로 합치면서 생긴 DB제어 문제입니다. > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

게시판2개를 하나로 합치면서 생긴 DB제어 문제입니다. 정보

게시판2개를 하나로 합치면서 생긴 DB제어 문제입니다.

본문

어느 특정 게시판을 사용을 하다가 (g4_write_A)

똑같은 양식으로 게시판을 복사를 해서 2개를 사용하고 있었습니다. (g4_write_A, g4_write_B)

B게시판에 있는 글들을 죄다 A게시판에 옮기게 되었는데

B게시판에 있었던 글이라는 것을 표현하기 위해서 wr_subject 필드(글 제목) 의 앞에 B_ 라는 문자를 붙이고 옮겼습니다.

당연히 PRIMARY KEY는 제거한 상태에서요....


그런데 생각하지 못했던 문제가 댓글이었습니다.

게시글의 경우엔 모두 B_ 라는 문자를 붙여서 B_테이블에서 왔다는 것을 구분할 수 있어서

wr_id, wr_num, wr_parent 모두 수정이 가능한데

댓글의 경우는 따로 구분을 해놓지가 않아서 수정이 힘든 상황입니다.


댓글은 wr_parent를 참조해서 어느 게시글의 댓글인지를 구분 할 수 있는건데

지금은 댓글들의 wr_id, wr_num, wr_parent 가 A게시판과 B게시판 모두 섞여서 문제입니다.



그나마 다행히도 댓글을 작성자 본인만 달 수 있게 해뒀었기 때문에

게시글과 그 글의 댓글의 wr_name이 같습니다.


지금 제가 생각한 해결방법은
일단 wr_subject에 B_라는 문자가 포함되어 있으면
wr_id, wr_num, wr_parent 에 모두 +10000을 합니다.


댓글의 wr_name과 이 댓글의 wr_parent에 해당하는 wr_id인 게시글의 (wr_name이 같고
wr_subject에 B_라는 문자가 있다면)
이 댓글의 wr_id, wr_num, wr_parent도 모두 +10000을 합니다.

이러면 일단 해결이 될 것 같습니다만


쿼리를 바로 날리려니까 어떻게 써야 할 지를 모르겠네요...

일단 wr_subject에 B_가 포함된 것들은 모두 wr_id, wr_num, wr_parent 에 +10000을 해 둔 상태입니다.



여기서 제가 생각한 쿼리는 이렇습니다만


UPDATE g4_write_A

SET wr_id = wr_id+1000000, wr_num = wr_num-1000000, wr_parent = wr_parent+1000000

WHERE (wr_subject = "") AND (wr_parent = (SELECT wr_parent FROM g4_write_A WHERE wr_subject LIKE 'B_%')) AND (wr_name = (SELECT wr_name FROM g4_write_A WHERE wr_subject LIKE 'B_%'))


당연히 안됩니다. WHERE절에서 SELECT문을 사용할때 문제가 있는건 압니다만 어떻게 해결해야 할지를 모르겠습니다.
  • 복사

댓글 전체

간단하게 해결했습니다

UPDATE
      g4_write_A q, g4_write_B f
SET
    q.wr_id = q.wr_id+1000000, q.wr_num = q.wr_num-1000000, q.wr_parent = q.wr_parent+1000000

WHERE 
    q.wr_name = f.wr_name AND q.wr_id = f.wr_id AND q.wr_num = f.wr_num AND q.wr_parent f.wr_parent AND q.wr_email = f.wr_email AND q.wr_password = f.wr_password


B 게시판의 내용을 이동시킨게 아니라 복사를 한 것이라 원본이 남아있어서
A게시판으로 옮겨진 내용중에 B게시판과 동일한 데이터를 가진 것들을 수정해서 쉽게 해결했네요.


혹시라도 나중에 게시판2개 합치다가 저랑 비슷한 상황에 처하시게 되시는 분들은
wr_id, wr_num, wr_parent를 A게시판과 겹치지 않게 그냥 먼저 +@ 시켜놓고 옮기세요...
© SIRSOFT
현재 페이지 제일 처음으로