게시물 복사 문의드려요. 처리 속도가 점점 느려져요.

게시물 복사 문의드려요. 처리 속도가 점점 느려져요.

QA

게시물 복사 문의드려요. 처리 속도가 점점 느려져요.

답변 2

본문

아래 소스코드를 이용하여 게시물 복사를 하려고 하는데요.

댓글이 있는 글을 복사할때 문제가 발생이 되어 문의드려요.

 

복사하려는 게시판에는 wr_id 가 새로 생성이 되어서,  wr_parent 값을 모두 바꿔야하는데요.

wr_homepage에 wr_parent 값을 저장해서 새로 생성된 wr_id를 wr_homepage를 이용해서 찾고

업데이트로 저장된 모든 게시물을 검색해서 wr_parent 를 바꾸려고 하니, 게시물이 쌓일수록

처리 속도가 점점 느려지는 문제가 발생되고 있어요.

10번정도 복사하니 10초정도 느려졌어요. 한번 복사할때마다 1초씩 느려지는 것 같아요.

속도가 느려지지 않게 하거나, insert할때 바로 wr_parent를 넣을 방법이 없을까요?

도움 부탁 드려요ㅜㅜ

 

        $write_table = "g5_write_news";
        $move_write_table = "g5_write_history";
 

        $next_wr_num_2 = get_next_num($move_write_table);
        
        $sql2 = " select * from $write_table order by wr_parent, wr_is_comment, wr_comment desc, wr_id ";
        $result2 = sql_query($sql2);
        
        while ($row2 = sql_fetch_array($result2))
        {
            $sql = " insert into $move_write_table
                        set wr_num = " . ($next_wr_num_2 ? "'$next_wr_num_2'" : "(SELECT IFNULL(MIN(wr_num) - 1, -1) FROM $move_write_table sq) ") . ",
                             wr_parent = '{$row2['wr_parent']}',
                             wr_reply = '{$row2['wr_reply']}',
                             wr_is_comment = '{$row2['wr_is_comment']}',
                             wr_comment = '{$row2['wr_comment']}',
                             wr_comment_reply = '{$row2['wr_comment_reply']}',
                             ca_name = '".addslashes($row2['ca_name'])."',
                             wr_option = '{$row2['wr_option']}',
                             wr_subject = '".addslashes($row2['wr_subject'])."',
                             wr_content = '".addslashes($row2['wr_content'])."',
                             wr_link1 = '".addslashes($row2['wr_link1'])."',
                             wr_link2 = '".addslashes($row2['wr_link2'])."',
                             wr_link1_hit = '{$row2['wr_link1_hit']}',
                             wr_link2_hit = '{$row2['wr_link2_hit']}',
                             wr_hit = '{$row2['wr_hit']}',
                             wr_good = '{$wr_good}',
                             wr_nogood = '{$wr_nogood}',
                             mb_id = '{$row2['mb_id']}',
                             wr_password = '{$row2['wr_password']}',
                             wr_name = '".addslashes($row2['wr_name'])."',
                             wr_email = '".addslashes($row2['wr_email'])."',
                             wr_homepage = '{$row2['wr_parent']}',
                             wr_datetime = '".G5_TIME_YMDHIS."',
                             wr_file = '{$row2['wr_file']}',
                             wr_last = '{$row2['wr_last']}',
                             wr_ip = '{$row2['wr_ip']}',
                             wr_1 = '".addslashes($row2['wr_1'])."',
                             wr_2 = '".addslashes($row2['wr_2'])."',
                             wr_3 = '".addslashes($row2['wr_3'])."',
                             wr_4 = '".addslashes($row2['wr_4'])."',
                             wr_5 = '".addslashes($row2['wr_5'])."',
                             wr_6 = '".addslashes($row2['wr_6'])."',
                             wr_7 = '".addslashes($row2['wr_7'])."',
                             wr_8 = '".addslashes($row2['wr_8'])."',
                             wr_9 = '".addslashes($row2['wr_9'])."',
                             wr_10 = '".addslashes($row2['wr_10'])."' ";
            sql_query($sql);
            
            $insert_id = sql_insert_id();
            if($row2['wr_id'] == $row2['wr_parent']){
              sql_query(" update $move_write_table set wr_parent = '$insert_id' where wr_id = '$insert_id' ");
              }
        }
        
        $sql3 = " select * from $move_write_table where wr_is_comment = 0 and wr_homepage != 'A' order by wr_parent, wr_is_comment, wr_comment desc, wr_id ";
        $result3 = sql_query($sql3);
        
        while ($row3 = sql_fetch_array($result3))
        {
          
          $sql4 = " select * from $move_write_table where wr_homepage = '{$row3['wr_homepage']}' and wr_homepage != 'A' order by wr_parent, wr_is_comment, wr_comment desc, wr_id ";
          $result4 = sql_query($sql4);
          while ($row4 = sql_fetch_array($result4))
          {
            sql_query(" update $move_write_table set wr_parent = '{$row3['wr_id']}' where wr_id = '{$row4['wr_id']}' ");
            sql_query(" update $move_write_table set wr_homepage = 'A' where wr_id = '{$row4['wr_id']}' ");
          }
          
          sql_query(" update $move_write_table set wr_homepage = 'A' where wr_id = '{$row3['wr_id']}' ");
          
        }

이 질문에 댓글 쓰기 :

답변 2

 

생각나는대로 몇가지 수정해보면 다음과 같습니다

 

=== $sql2 order 변경 -- wr_comment desc 은 전혀 쓸모없는 정렬입니다

order by wr_parent, wr_is_comment, wr_comment, wr_comment_reply ";

 

 ===wr_num값이 맞지않게 들어가겠네요

  $next_wr_num_2 = get_next_num($move_write_table); <=== 위치변경

 

    $wr_parent = 99999; 

        while ($row2 = sql_fetch_array($result2)){

           //이렇게 하면 order by에 의해 댓글 wr_num값이 원글 값과 동일하게 들어 갑니다
            if($row2['wr_is_comment'] ==0){

                $next_wr_num_2 = get_next_num($move_write_table);
            }
            $sql = " insert into $move_write_table set wr_num ='$next_wr_num_2' ,wr_parent ='$wr_parent',

 

== wr_parent update하는 코드를 잘 생각해보면 $sql3 이하 loop돌면서 시간을 걸리게 하는

     부분을 없앨 수 있겠습니다(복사하기를 해보면서 테스트 하면 답이 나올 것 같은데....)

      wr_homepage 값도 필요없겠습니다

     $sql3 부터 코드가 상당히 안좋습니다

없어도 되는 방법이 있기도 하지만 update를 한번만에 될 것을 두번 나누어서 하고 있네요

 

== 마지막에 g5_board에 게시물 count를 update하는 코드가 있어야 합니다

     insert할때마다 count update 쿼리를 할 것이 아니라 모든 게시물 등록 후 마지막에 한번만

     update하는 방법을 찾으세요

 

그리고 복사방법이 이상하네요

한번 복사가 끝난 게시물을 다음번 복사때는 제외해야 하는 것 아닌가요?

 

 

 

 

 

 

균이님 답변 감사드려요.
move_update.php 파일을 보면
sql_query(" update $move_write_table set wr_parent = '$save_parent' where wr_id = '$insert_id' ");
이부분에서 wr_parent를 저장하는 것 같은데, 위에 보면
$save_parent = $insert_id; 에서 wr_id를 가져오잖아요?
이렇게 하면, 원본에서 바뀐 게시물의 wr_id가 저장이 안되고 자신의 wr_id가 저장이 되어서요.
그래서 while문을 두번이나 돌리게 되었는데ㅜㅜ 많이 어렵네요.
제가 문법의 기초가 안되어있어서 늘 많이 헤매고 있습니다.
도움 부탁드려요~ㅜㅜ

원본 게시물은 내용만 조금씩 바뀌는 같은 게시물이고 하루에 한번씩 히스토리에 저장해서 날짜별로 비교해보려고 해요

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
filter #php ×
전체 15,331
© SIRSOFT
현재 페이지 제일 처음으로