카운트 조정을 sql 쿼리 여러개시판 가능한가요?

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
카운트 조정을 sql 쿼리 여러개시판 가능한가요?

QA

카운트 조정을 sql 쿼리 여러개시판 가능한가요?

본문

이곳 게시판에서 둘러보다가 

 

update g5_board
    set bo_count_write = (select count(*) from g5_write_게시판ID where wr_is_comment = 0)
 where bo_table = '게시판ID'

 

이렇게 하는 방법을 봤는데 게시판을 여러개 한번에 카운트 조정을 할수 있는 방법이 따로 있을까요?

이 질문에 댓글 쓰기 :

답변 2

※ 여러 게시판의 게시글 수를 일괄적으로 한꺼번에 조회하고,

   각 게시판별로 갱신하려 하시는 것인가요.

     > 각 게시판ID에 대해 개별적으로 카운트를 계산하여

    g5_board 테이블의 bo_count_write 필드를 일괄 업데이트할 수 있지 않을까요?

 

  - 새로운 PHP 파일을 만들어 관리자가 접근하여 실행.

 

1. 모든 게시판에 대해 개별적으로 카운트를 조회하고 필드를 업데이트하는 쿼리


UPDATE g5_board b
JOIN (
    SELECT '게시판ID1' AS bo_table, COUNT(*) AS count_write FROM g5_write_게시판ID1 WHERE wr_is_comment = 0
    UNION ALL
    SELECT '게시판ID2', COUNT(*) FROM g5_write_게시판ID2 WHERE wr_is_comment = 0
    UNION ALL
    SELECT '게시판ID3', COUNT(*) FROM g5_write_게시판ID3 WHERE wr_is_comment = 0
    -- 추가적인 게시판들도 여기에 UNION ALL로 계속 추가
) AS subquery ON b.bo_table = subquery.bo_table
SET b.bo_count_write = subquery.count_write;

2. SQL 쿼리를 실행할 PHP 파일


<?php
include_once('./common.php');
if ($is_admin != 'super') {
    die('관리자 권한이 필요합니다.');
}
$sql = "
    UPDATE g5_board b
    JOIN (
        SELECT '게시판ID1' AS bo_table, COUNT(*) AS count_write FROM g5_write_게시판ID1 WHERE wr_is_comment = 0
        UNION ALL
        SELECT '게시판ID2', COUNT(*) FROM g5_write_게시판ID2 WHERE wr_is_comment = 0
        UNION ALL
        SELECT '게시판ID3', COUNT(*) FROM g5_write_게시판ID3 WHERE wr_is_comment = 0
        -- 추가적인 게시판들도 여기에 UNION ALL로 계속 추가
    ) AS subquery ON b.bo_table = subquery.bo_table
    SET b.bo_count_write = subquery.count_write;
";
$result = sql_query($sql);
if ($result) {
    echo "모든 게시판의 글 수가 성공적으로 업데이트되었습니다.";
} else {
    echo "업데이트에 실패했습니다. SQL 오류를 확인하세요.";
}

3. CRON 작업을 추가하실 수도 ~


0 * * * * php /path/to/gnuboard5/update_board_count.php

<?php
include_once('./_common.php');
 
// 업데이트할 게시판 ID 배열
$bo_tables = array(
    'free', // 자유게시판
    'gallery', // 갤러리
);
 
// 각 게시판별로 반복
foreach ($bo_tables as $bo_table) {
    // 게시물 수 업데이트 쿼리
    $sql = " update {$g5['board_table']} 
             set bo_count_write = (
                 select count(*) 
                 from {$g5['write_prefix']}{$bo_table} 
                 where wr_is_comment = 0
             )
             where bo_table = '{$bo_table}' ";
    
    // 쿼리 실행
    sql_query($sql);
}
 
?>
답변을 작성하시기 전에 로그인 해주세요.
전체 1,178
QA 내용 검색

회원로그인

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