게시판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문을 사용할때 문제가 있는건 압니다만 어떻게 해결해야 할지를 모르겠습니다.
똑같은 양식으로 게시판을 복사를 해서 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게시판과 겹치지 않게 그냥 먼저 +@ 시켜놓고 옮기세요...
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게시판과 겹치지 않게 그냥 먼저 +@ 시켜놓고 옮기세요...