'카누'님 팁중 전체게시판 랜덤 게시물 조회수 랜덤으로 조작 문의드려요

'카누'님 팁중 전체게시판 랜덤 게시물 조회수 랜덤으로 조작 문의드려요

QA

'카누'님 팁중 전체게시판 랜덤 게시물 조회수 랜덤으로 조작 문의드려요

본문

카누님 2017년 올려주신 글에서 아래 내용을 발견했습니다.



$Search = " where (1) ";
$Search .= " and wr_is_comment = 0 and wr_datetime >= (NOW() - INTERVAL 7 DAY) ";
$SelectBoard = " select bo_table from ".$g5['board_table'];
$QueryBoard = sql_query($SelectBoard);
while($RowBoard = sql_fetch_array($QueryBoard)){ $ResultSelect[] = "( select *, '".$RowBoard['bo_table']."' as bo_table from ".$g5['write_prefix'].$RowBoard['bo_table'].$Search." )"; }
$ResultQuery = implode(" union all ", $ResultSelect);
$ResultQuery .= " order by rand() limit 10 ";
$Query = sql_query($ResultQuery);
while($Row = sql_fetch_array($Query)){
 $Rand = rand(1, 50);
    sql_query(" update ".$g5['write_prefix'].$Row['bo_table']." set wr_hit = wr_hit+".$Rand." where wr_id = ".$Row['wr_id']." ");
}

모든 게시판에 적용 됩니다.

$Rand = rand(1, 50); // 1부터 50까지 랜덤으로 올라갑니다.

 

 

위 내용에 보면 $Search .= " and wr_is_comment = 0 and wr_datetime >= (NOW() - INTERVAL 7 DAY) 에서

질문1 : 7일 내의 작성 글에만 저 코드가 적용되는 건가요?

질문2 : 0~3일 내의 작성 글에는 rand(1, 50)을 적용하고 4~7일 내의 작성 글에는 rand(1, 10)을 적용하고 싶다           면 어떻게 수정해야 할지 문의드려봅니다.

이 질문에 댓글 쓰기 :

답변 2

게시물 건 바이 건 반복 처리라서 좋지 않습니다.

게시판별 일괄 갱신용 코드 남깁니다.

- https://sir.kr/g5_tip/17910


<?php
include_once('./common.php'); // 공통 호출
 
// Step 1. 게시판 테이블명 구하기
$board_list = []; // 배열 초기화
$sql = "SELECT bo_table FROM {$g5['board_table']}";
$result = sql_query($sql);
while ( $row=sql_fetch_array($result) ) {
    $board_list[] = $row['bo_table'];
}
/*
// 또는 필요한 테이블명만 나열
$board_list = [
    'free',
    'gallery',
    'notice',
];
*/
 
// Step 2. 게시판별 최근 1주일 내 게시물, 조회수 랜덤 갱신 (3일 내 1~50, 3일 초과 1~10)
foreach ( $board_list as $board ) {
    $table = $g5['write_prefix'].$board; // 실제 테이블명. 예) g5_write_free
    sql_query("UPDATE {$table}
SET wr_hit=IF(DATEDIFF(NOW(), wr_datetime)<=3, FLOOR(1+(RAND()*50)), FLOOR(1+(RAND()*10)))
WHERE wr_datetime > DATE_SUB(NOW(), INTERVAL 7 DAY)");
}

감사합니다. 초보라서 하사해 주신 코드 그대로 문의드린 코드 자리(/extend/user.config.php)에 치환했는데 게시판 화면이 다 깨져버립니다. ㅠㅠ 맨 윗줄 <?php가 안닫아져서 그런가 해서 없에도 보고 맨끝에 ?>도 넣어보고 했지만... 계속 깨집니다. 아주 기초적인 질문일 수 있지만 어떻게 완성해야 하는지 조언 부탁드립니다.

조회수를 매번 랜덤으로 갱신하는 것은 효율이 좋지 않아 단발성 실행이라 생각했는데
/extend/usr.config.php에 넣어서 매번 실행할 것 같으면
변수명이 겹치지 않도록 아래처럼 변경해주면 됩니다.


// Step 1. 게시판 테이블명 구하기
$_board_list = []; // 배열 초기화
$_sql = "SELECT bo_table FROM {$g5['board_table']}";
$_result = sql_query($_sql);
while ( $_row=sql_fetch_array($_result) ) {
    $_board_list[] = $_row['bo_table'];
}

/*
// 또는 필요한 테이블명만 나열
$board_list = [
    'free',
    'gallery',
    'notice',
];
*/
 
// Step 2. 게시판별 최근 1주일 내 게시물, 조회수 랜덤 갱신 (3일 내 1~50, 3일 초과 1~10)
foreach ( $_board_list as $_board ) {
    $_table = $g5['write_prefix'].$_board; // 실제 테이블명. 예) g5_write_free
    sql_query("UPDATE {$_table}
SET wr_hit=IF(DATEDIFF(NOW(), wr_datetime)<=3, FLOOR(1+(RAND()*50)), FLOOR(1+(RAND()*10)))
WHERE wr_datetime > DATE_SUB(NOW(), INTERVAL 7 DAY)");
}

네 자연스럽게 증가하는걸 보여주는거 같아서 저 방법이 좋아보였습니다. 

원글에 문의드린 코드는 일정 시간마다 랜덤하게 조회수를 추가해서 증가하는 기능이었는데

답변 주신 내용 적용해 보니 새로고침 할때마다 조회수가 정해진 랜덤값으로 증가해서 더해지는게 아니라, 범위 내에서 늘었다 줄었다 하면서 표시 되는것 같습니다.ㅜㅜ 

그러면 아래처럼 기존 조회수에 더해주면 됩니다.
코드가 짧아서, 이해하면 응용&활용하기 좋습니다.


// Step 1. 게시판 테이블명 구하기
$_board_list = []; // 배열 초기화
$_sql = "SELECT bo_table FROM {$g5['board_table']}";
$_result = sql_query($_sql);
while ( $_row=sql_fetch_array($_result) ) {
    $_board_list[] = $_row['bo_table'];
}

/*
// 또는 필요한 테이블명만 나열
$board_list = [
    'free',
    'gallery',
    'notice',
];
*/
 
// Step 2. 게시판별 최근 1주일 내 게시물, 조회수 랜덤 갱신 (3일 내 1~50, 3일 초과 1~10)
foreach ( $_board_list as $_board ) {
    $_table = $g5['write_prefix'].$_board; // 실제 테이블명. 예) g5_write_free
    sql_query("UPDATE {$_table}
SET wr_hit=wr_hit+IF(DATEDIFF(NOW(), wr_datetime)<=3, FLOOR(1+(RAND()*50)), FLOOR(1+(RAND()*10)))
WHERE wr_datetime > DATE_SUB(NOW(), INTERVAL 7 DAY)");
}

문제는 호출될 때마다 조회수가 계속 증가하는 것이니
일정 시간마다 실행될 수 있도록 해야 하는데, 간단하게 아래처럼 하면 됩니다. [방법은 많습니다.]
위에 적었지만, 코드가 짧으니 그냥 복사&붙여넣기만 하지 말고 이해 후 응용&활용했으면 합니다.

<?php
// /extend/user.config.php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가;

//━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// 2022-02-21(월) - 일정 시간마다, 일정 기간 내 게시물 조회수 증가

// 조회수 갱신 시각 기록용 파일 - timestamp만 기록하면 되니까, 파일명만 덩그러니.
$hit_config_file = dirname($dbconfig_file).'/hit';

// 파일이 없거나, 30분(60초*30=1800) 초과 시 갱신
if ( !file_exists($hit_config_file) || (G5_SERVER_TIME-file_get_contents($hit_config_file))>1800 ) {

    // Step 1. 게시판 테이블명 구하기
    $_board_list = []; // 배열 초기화
    $_sql = "SELECT bo_table FROM {$g5['board_table']}";
    $_result = sql_query($_sql);
    while ( $_row=sql_fetch_array($_result) ) {
        $_board_list[] = $_row['bo_table'];
    }
    /*
    // 또는 필요한 테이블명만 나열
    $board_list = [
        'free',
        'gallery',
        'notice',
    ];
    */

    // Step 2. 게시판별 최근 1주일 내 게시물, 조회수 랜덤 갱신 (3일 내 1~50, 3일 초과 1~10)
    foreach ( $_board_list as $_board ) {
        $_table = $g5['write_prefix'].$_board; // 실제 테이블명. 예) g5_write_free
        sql_query("UPDATE {$_table}
    SET wr_hit=wr_hit+IF(DATEDIFF(NOW(), wr_datetime)<=3, FLOOR(1+(RAND()*50)), FLOOR(1+(RAND()*10)))
    WHERE wr_datetime > DATE_SUB(NOW(), INTERVAL 7 DAY)");
    }

    // 다음 비교를 위해 현재 timestamp 기록
    file_put_contents($hit_config_file, G5_SERVER_TIME);
}
//━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

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

회원로그인

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