테스트 사이트 - 개발 중인 베타 버전입니다

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

파워스피드2 11개월 전 조회 3,030

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

 

update g5_board

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

 where bo_table = '게시판ID'

 

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

댓글을 작성하려면 로그인이 필요합니다.

답변 2개

채택된 답변
+20 포인트
glitter0gim
11개월 전

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

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

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

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

 

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

 

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

</p>

<p>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;</p>

<p>

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

</p>

<p><?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);</p>

<p>if ($result) {

    echo "모든 게시판의 글 수가 성공적으로 업데이트되었습니다.";

} else {

    echo "업데이트에 실패했습니다. SQL 오류를 확인하세요.";

}</p>

<p>

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

0 * * * * php /path/to/gnuboard5/update_board_count.php</p>

<p>

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

파워스피드2
11개월 전
sql에서만 실행해도 잘되네요. 정말 감사합니다.
g
glitter0gim
11개월 전
~/_
-
- """SQL 쿼리를 실행할 PHP 파일"""은 '미니님a'의 소스가 더 간결하고 좋습니다.
> 처리 결과는 같습니다.

댓글을 작성하려면 로그인이 필요합니다.

11개월 전

</p>

<p><?php</p>

<p>include_once('./_common.php');</p>

<p> </p>

<p>// 업데이트할 게시판 ID 배열</p>

<p>$bo_tables = array(</p>

<p>    'free', // 자유게시판</p>

<p>    'gallery', // 갤러리</p>

<p>);</p>

<p> </p>

<p>// 각 게시판별로 반복</p>

<p>foreach ($bo_tables as $bo_table) {</p>

<p>    // 게시물 수 업데이트 쿼리</p>

<p>    $sql = " update {$g5['board_table']} </p>

<p>             set bo_count_write = (</p>

<p>                 select count(*) </p>

<p>                 from {$g5['write_prefix']}{$bo_table} </p>

<p>                 where wr_is_comment = 0</p>

<p>             )</p>

<p>             where bo_table = '{$bo_table}' ";</p>

<p>    </p>

<p>    // 쿼리 실행</p>

<p>    sql_query($sql);</p>

<p>}</p>

<p> </p>

<p>?></p>

<p>

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

g
glitter0gim
11개월 전
- 배열구조에 담아서 반복 처리하니, 간결하고 좋습니다 !
-
- 초보, 한 수 배워갑니다.

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인