카운트조정 실행파일?

카운트조정 실행파일?

QA

카운트조정 실행파일?

본문

안녕 하세요

 

특정 게시판 1개

카운트조정 을 cron 으로 돌리려고 하는데

/adm/board_form_update.php 에서

복사 해서 파일 만들면 된다고 하길래

걍 복사만 하면 되는줄 알고

아래와  같이 파일을 만들엇는데

에러나고 안됩니다

 

고수님

실행되는 소스좀 부탁 드립니다

감사 합니다

 

<?php include_once('./common.php'); 

 

    if (isset($_POST['proc_count'])) {

        // 원글을 얻습니다.

        //$sql = " select wr_id from {$g5['write_prefix']}{$bo_table} where wr_is_comment = 0 ";

        $sql = " select a.wr_id, (count(b.wr_parent) - 1) as cnt from {$g5['write_prefix']}{$bo_table} a, {$g5['write_prefix']}{$bo_table} b where a.wr_id=b.wr_parent and a.wr_is_comment=0 group by a.wr_id ";

        $result = sql_query($sql);

        for ($i=0; $row=sql_fetch_array($result); $i++) {

            /*

            // 코멘트수를 얻습니다.

            $sql2 = " select count(*) as cnt from {$g5['write_prefix']}$bo_table where wr_parent = '{$row['wr_id']}' and wr_is_comment = 1 ";

            $row2 = sql_fetch($sql2);

            */

            

            // 다운로드수를 얻습니다.

            $row2 = sql_fetch(" select sum(bf_download) as download from {$g5['board_file_table']} where bo_table = '{$bo_table}' and wr_id = '{$row['wr_id']}' "); 

 

            sql_query(" update {$g5['write_prefix']}{$bo_table} set wr_comment = '{$row['cnt']}', as_download = '{$row2['download']}' where wr_id = '{$row['wr_id']}' ");

        }

    } 

 

    // 공지사항에는 등록되어 있지만 실제 존재하지 않는 글 아이디는 삭제합니다.

    $bo_notice = "";

    $lf = "";

    if ($board['bo_notice']) {

        $tmp_array = explode(",", $board['bo_notice']);

        for ($i=0; $i<count($tmp_array); $i++) {

            $tmp_wr_id = trim($tmp_array[$i]);

            $row = sql_fetch(" select count(*) as cnt from {$g5['write_prefix']}{$bo_table} where wr_id = '{$tmp_wr_id}' ");

            if ($row['cnt'])

            {

                $bo_notice .= $lf . $tmp_wr_id;

                $lf = ",";

            }

        }

    } 

 

    $sql = " update {$g5['board_table']}

                set bo_notice = '{$bo_notice}',

                    bo_count_write = '{$bo_count_write}',

                    bo_count_comment = '{$bo_count_comment}',

                    {$sql_common}

              where bo_table = '{$bo_table}' ";

    sql_query($sql); 

 

 

?> 

 

 

 

 

이 질문에 댓글 쓰기 :

답변 3

아래 코드를 lib/recount.lib.php 로 생성하시고


function recount($bo_table){
    
    global $g5;
    
    if(!sql_num_rows(sql_query(" show tables like '{$g5['write_prefix']}{$bo_table}' "))) {
        return false;    
    }
    
    // 게시판의 글 수
    $sql = " select count(*) as cnt from {$g5['write_prefix']}{$bo_table} where wr_is_comment = 0 ";
    $row = sql_fetch($sql);
    $bo_count_write = $row['cnt'];
    // 게시판의 코멘트 수
    $sql = " select count(*) as cnt from {$g5['write_prefix']}{$bo_table} where wr_is_comment = 1 ";
    $row = sql_fetch($sql);
    $bo_count_comment = $row['cnt'];
    // 글수 조정
    /*
        엔피씨님의 팁으로 교체합니다. 130308
        http://sir.kr/g5_tiptech/27207
    */
    $sql = " select a.wr_id, (count(b.wr_parent) - 1) as cnt from {$g5['write_prefix']}{$bo_table} a, {$g5['write_prefix']}{$bo_table} b where a.wr_id=b.wr_parent and a.wr_is_comment=0 group by a.wr_id ";
    $result = sql_query($sql);
    for ($i = 0; $row = sql_fetch_array($result); $i++) {
        /*
        // 코멘트수를 얻습니다.
        $sql2 = " select count(*) as cnt from {$g5['write_prefix']}$bo_table where wr_parent = '{$row['wr_id']}' and wr_is_comment = 1 ";
        $row2 = sql_fetch($sql2);
        */
        sql_query(" update {$g5['write_prefix']}{$bo_table} set wr_comment = '{$row['cnt']}' where wr_id = '{$row['wr_id']}' ");
    }

    // 공지사항에는 등록되어 있지만 실제 존재하지 않는 글 아이디는 삭제합니다.
    $bo_notice = "";
    $lf = "";
    if ($board['bo_notice']) {
        $tmp_array = explode(",", $board['bo_notice']);
        for ($i = 0; $i < count($tmp_array); $i++) {
            $tmp_wr_id = trim($tmp_array[$i]);
            $row = sql_fetch(" select count(*) as cnt from {$g5['write_prefix']}{$bo_table} where wr_id = '{$tmp_wr_id}' ");
            if ($row['cnt']) {
                $bo_notice .= $lf . $tmp_wr_id;
                $lf = ",";
            }
        }
    }
    $sql = " update {$g5['board_table']}
                set bo_notice = '{$bo_notice}',
                    bo_count_write = '{$bo_count_write}',
                    bo_count_comment = '{$bo_count_comment}'
              where bo_table = '{$bo_table}' ";
    sql_query($sql);
    return true;
    
}

 

/skin/list.skin.php

파일 상단에 


$tmp = sql_fetch(" select count(*) as cnt from {$g5['write_prefix']}{$bo_table} where wr_is_comment = 0 ");
if($tmp['cnt'] != $board['bo_count_write']){
include_once(G5_LIB_PATH."/recount.lib.php");
$recount = recount($bo_table);
}

마이존 님
다시한번 감사 말씀 드립니다
님 소스코드 적용하니 cron 돌릴 필요도 없이
삭제되면 자동 으로 카운트조정 되고
아예 신경쓸 필요도 없고 정말 굉장합니다
님 덕분에 매일같이 일상 이엇던
번거로운 일 에서 해방 됫습니다
정말정말 감사 합니다

특정 게시판 1개 카운트조정 을 cron 으로 돌리려고 하는데<---무슨 까닭으로 이런 터무니 없는 실행을

하려고 하는가요?

카운트가 맞지않게 되는 근본 원인을 찾아야 합니다

 

하루 게시물 수백개가 올라오고 사이트 특성상 시간이 지난 게시물은 그쓸모가 다한 게시물 이기때문에 일정시간 마다 게시물을 자동삭제 되도록 하고 잇습니다
그래서 일정 시간마다 카운트조정을 해줘야 게시물번호가 정상적으로 됩니다 이걸 매번 수동으로 하기가 여간 번거로운게 아디더군요

삭제 할때 그냥 게시물만 삭제 하니 그렇게됩니다
bbs/delete.php 참고해서 게시물 삭제와 동시에 글 숫자 감소 코드만 넣어주면 크론으로 하는 저런 실행은 필요 없습니다
일정 시간 지나서 일괄 삭제한다면 삭제 하기 전에 삭제할 갯수를 체크해서 글 숫자를 체크한 갯수만큼 빼기하는 코드를 넣으세요

그렇게 말씀하시면 게시판 관리자페이지에 있는 카운트 조정은 왜 있는걸가요?
질문자의 요지는 그걸 매번 클릭하지 않고 그냥 자동으로 돌아가게 하는게 목적인것 같습니다

균이님 답변 감사 합니다 만
이런식 으로 방향만을 제시해 주시는건
다른 모든 질문 에서도
원하는 답은 아닌듯 하네요
하고자 하는 방향은 모두가 알고 잇으므로
질문을 하는것 이고
질문자들이 초보이다 보니
그 방향의 소스코드를 모르니
질문을 한것 인데
누구나 다 아는 방향만을 제시 하는건
무슨 의미로 답변을 하시는건지 ㅠ

님 답변을 예로 들어 말한다면
그누설치를 하는데 ㅇㅇㅇ 에러가 납니다
하는 질문에
그 ㅇㅇㅇ 에러나는 근본 원인을 찻고
ㅇㅇㅇ 에러가 안나게 설치를 해야 한다
이런식의 답변인데
이거 누가 모릅니까 ??
참으로 답답한 답변 이네요 ㅠㅠ

ㅎㅎ 그런가요,
질문이그렇게 방향을 알려주는 수밖에 없는걸요
삭제하는 코드가 없고 하나씩 지우는지 일괄 지우는지 설명이 없으니 코드를 추측해서  만들 수는 없죠
일정시간이 지나면 삭제한다니 한꺼번에 일괄 지우기를 하는 것 같기도 합니다만

그리고 delete 열어서  확인해보았나요?
게시물 숫자감소라고 설명이  되어있어요
그 코드를 보고서 자신에게 맞게 만들면  된다는 것인데 이 정도 답변이면 질문 내용에는 충분하다고 봅니다
답답한 질문이지 답답한 답변은 아니라고 봅니다

잘 된다는 답변의 코드에 대한 조언을  하자면 별로 좋지않은 방법입니다

하루에 게시물 수백개가 올라온다고 하였는데 목록을 볼때마다 그리고 페이지 이동마다 카운트 문제가 있는지  체크해야하니 불필요한 쿼리를 발생시키게 됩니다

그리고 삭제가 생긴 경우에는 게시물이 1천개면 1천번 쿼리를 실행 합니다

게시물이 많으면 디비의 트래픽이 상당히 상승하겠죠

 

삭제시 게시물 감소 코드를 넣으면 저렇게할 필요가 없는데 그게 어려운 것 같으니

이 소스를 사용하더라도 list스킨에 넣지말고 삭제코드가 있는 화일  삭제 코드 뒤에 넣으세요

 

불필요하니 삭제해야할 코드

 

--------------------------------------첫부분

function recount($bo_table){
    
    global $g5;
    
    if(!sql_num_rows(sql_query(" show tables like '{$g5['write_prefix']}{$bo_table}' "))) {
        return false;    
    }

-------------------댓글만 삭제하는 경우가 없다면 불필요한 코드(게시물이 1천개면 1천번 실행되는 코드임)

    $sql = " select a.wr_id, (count(b.wr_parent) - 1) as cnt from {$g5['write_prefix']}{$bo_table} a, {$g5['write_prefix']}{$bo_table} b where a.wr_id=b.wr_parent and a.wr_is_comment=0 group by a.wr_id ";
    $result = sql_query($sql);
    for ($i = 0; $row = sql_fetch_array($result); $i++) {
        /*
        // 코멘트수를 얻습니다.
        $sql2 = " select count(*) as cnt from {$g5['write_prefix']}$bo_table where wr_parent = '{$row['wr_id']}' and wr_is_comment = 1 ";
        $row2 = sql_fetch($sql2);
        */
        sql_query(" update {$g5['write_prefix']}{$bo_table} set wr_comment = '{$row['cnt']}' where wr_id = '{$row['wr_id']}' ");
    }

====================마지막 부분

    return true;
    
}

 

=================

위 코드 일부는 관리자페이지에 있는 카운트 조정 소스인데 실행된다고 해서 아무 곳에 넣어서 사용하면 안됩니다

카운트 조정은 게시물을 phpmyadmin으로 삭제하거나

예상치 못한 오류로 카운트가 맞지않을 때 어쩌다 실행하는 것이지

비정상적인 삭제가 자주 발생하는 곳에서 상시적으로 실행해도 되는 코드가 아닙니다

게시물수가 많으면 게시물수만큼 update쿼리를 진행하므로 상당한 시간이 소요되고 디비 트래픽도 증가합니다

 

 

 

 

 

삭제코드 아래에 님께서 적으신 아래의 소스코드만 넣으라는 말씀 인가요??<---
답변을 잘보세요 위 코드는 비정상적인 댓글 삭제가 없다면 넣을 코드가 아니라
빼버려야할 코드입니다
게시물 수만큼 실행되는 코드라고 했잖아요

일정시간 지나면 삭제 한다고 했는데 그 삭제 코드가 어디에 있는지 모르는가요?
저로서는 어느 화일에 삭제 코드를 만들어넣었는지 모르죠
adm/board_form_update.php는 아닙니다
-----------
답변에 있는 코드 3부분은 없어져야될 코드입니다

답변을 작성하시기 전에 로그인 해주세요.
전체 123,479 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT