지정 기간 내 게시판별 조회수 랜덤 증가 外 > 그누보드5 팁자료실

그누보드5 팁자료실

지정 기간 내 게시판별 조회수 랜덤 증가 外 정보

지정 기간 내 게시판별 조회수 랜덤 증가 外

본문

Q&A 보고, 이전에 올려진 게시물 보고, 도움될까 싶어 참고로 추가합니다.

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

 

최근 1주일 내 작성된 게시물의 조회수를

3일 내 1~50, 초과 시 1~10 사이 랜덤하게 증가시킵니다.

* 응용하면 이것저것 편하게 일괄 처리가 가능하겠죠?

 

코드가 간결해 설명이 필요할까 싶지만, 역시 도움될까 싶어 살짝 추가합니다.

 

작성일이 현재에서 7일을 뺀 날짜보다 큰

wr_datetime > DATE_SUB(NOW(), INTERVAL 7 DAY)

 

현재에서 작성일을 뺀 날(days) 차이가 3일 내 A값, 아니면 B값

IF(DATEDIFF(NOW(), wr_datetime)<=3, A, B)

 

1에서 50까지의 랜덤한 숫자
FLOOR(1+(RAND()*50))

- https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_rand

 

* 효율은 떨어지지만 /extend/user.config.php 파일에 넣는 경우를 위해 변수명 변경


<?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=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
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);
}
//━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
추천
9

댓글 3개

전체 2,427 |RSS
그누보드5 팁자료실 내용 검색

회원로그인

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