그누보드 [G5] 포인트 내역 압축 플러그인
페이지 정보
본문
그누보드를 운영하다보면 디비의 포인트 테이블에 데이타가 누적되서 디비 용량이 부담이 되는 경우가 있습니다
이때 누적된 포인트를 합산해서 디비 포인트 테이블을 가볍게 만드는 방법입니다
해당년도 10건 미만인경우에는 포인트 압축하지 않습니다
1차 제작자 (불당 님)
2차 제작자 (밀러83 님) https://sir.kr/g4_tiptech/25410
3차 제작자 (익명닉네임 님) https://sir.kr/g5_plugin/663
1. adm / point_zip.php 파일 생성후 아래 내용 저장
<?php
$sub_menu = "200200";
include_once('./_common.php');
auth_check($auth[$sub_menu], 'w');
check_token();
// 변수 설정입니다. 필요에 맞게 설정하세요.
$year = $_POST['year'];
$cut = $_POST['number'];
$min = 10; // 그 해에 포인트가 10건 이하이면 압축하지 않습니다.
$expire = preg_replace('/[^0-9]/', '', $_POST['po_expire_term']);
// 포인트 백업 테이블이 있는지 검사한다.
if(!sql_query(" DESCRIBE {$g5['point_table']}_backup ", false)) {
// 포인트 백업 테이블을 만듭니다.
$sql = "create table `{$g5['point_table']}_backup` (
`po_id` int(11) NOT NULL auto_increment,
`mb_id` varchar(20) NOT NULL default '',
`po_datetime` datetime NOT NULL default '0000-00-00 00:00:00',
`po_content` varchar(255) NOT NULL default '',
`po_point` int(11) NOT NULL default '0',
`po_use_point` int(11) NOT NULL default '0',
`po_expired` tinyint(4) NOT NULL default '0',
`po_expire_date` date NOT NULL default '0000-00-00',
`po_mb_point` int(11) NOT NULL default '0',
`po_rel_table` varchar(20) NOT NULL default '',
`po_rel_id` varchar(20) NOT NULL default '',
`po_rel_action` varchar(100) NOT NULL default '',
PRIMARY KEY (`po_id`),
KEY `index1` (`mb_id`,`po_rel_table`,`po_rel_id`,`po_rel_action`),
KEY `index2` (`po_expire_date`)
) ";
sql_query($sql, false);
}
// po_datetime을 기준으로 해당 연도의 포인트 개수와 포인트 총합을 가져옴. (항목 많은 순서로 정렬)
$sql = " select mb_id, count(po_point) as cnt, sum(po_point) as sum from {$g5['point_table']} where po_datetime like '{$year}%' ";
$sql .= " group by mb_id having cnt > '{$min}' order by cnt desc ";
if ($cut) $sql .= " limit {$cut} ";
$qry = sql_query($sql);
$total_cnt = 0;
for($i=0; $row = sql_fetch_array($qry); $i++) {
$whereclause = " mb_id = '{$row['mb_id']}' and po_datetime like '{$year}%' ";
// 일단 백업테이블로 항목을 복사
$sql = "insert into `{$g5['point_table']}_backup` select * from `{$g5['point_table']}` where {$whereclause}";
sql_query($sql);
// 복사했으니 삭제해버리기
$sql = " delete from `{$g5['point_table']}` where {$whereclause} ";
sql_query($sql);
// 옮겼으니 압축된 항목 삽입하기
insert_point($row['mb_id'], $row['sum'], "{$year}년 포인트 내역 - 압축", "@point_zip", $row['mb_id'], $member['mb_id'] ."-". uniqid(''), $expire);
// 압축한 건수를 더함
$total_cnt += $row['cnt'];
}
echo "<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">";
$msg = "{$i} 명의 {$year} 년도 포인트 {$total_cnt} 건을 정리하였습니다.";
if ($cut) {
$g5['title'] = '포인트관리';
include_once ('./admin.head.php');
echo $msg;
if($i == $cut) echo "<br>F5(새로고침)를 누르면 추가로 적용됩니다. <a href=\"./point_list.php?{$qstr}\">[ 여기 ]</a> 를 누르시면 포인트관리 페이지로 이동됩니다.";
include_once ('./admin.tail.php');
} else {
alert($msg, './point_list.php?'.$qstr);
}
2. adm / point_list.php 182줄 페이징 아래에 내용 추가
<h2 class="h2_frm">포인트 내역 압축</h2>
<form name="fpointlist1" method="post" id="fpointlist1" action="./point_zip.php" autocomplete="off">
<div class="tbl_frm01 tbl_wrap">
<table>
<colgroup>
<col class="grid_4">
<col>
</colgroup>
<tbody>
<tr>
<th scope="row"><label for="year">압축년도<strong class="sound_only">필수</strong></label></th>
<td>
<input type="text" name="year" value="<?php echo $year; ?>" id="year" class="required frm_input" required>
예) <?php echo date("Y"); ?> (숫자만 입력하세요)
</td>
</tr>
<tr>
<th scope="row"><label for="number">압축회원수<strong class="sound_only">필수</strong></label></th>
<td>
<input type="text" name="number" value="<?php echo $number; ?>" id="number" class="frm_input">
인원수 입력하면 포인트 적립건수가 많은 회원중 입력숫자만큼만 압축합니다
</td>
</tr>
</tbody>
</table>
</div>
<div class="btn_confirm01 btn_confirm">
<input type="submit" value="확인" class="btn_submit btn">
</div>
</form>
이때 누적된 포인트를 합산해서 디비 포인트 테이블을 가볍게 만드는 방법입니다
해당년도 10건 미만인경우에는 포인트 압축하지 않습니다
1차 제작자 (불당 님)
2차 제작자 (밀러83 님) https://sir.kr/g4_tiptech/25410
3차 제작자 (익명닉네임 님) https://sir.kr/g5_plugin/663
1. adm / point_zip.php 파일 생성후 아래 내용 저장
<?php
$sub_menu = "200200";
include_once('./_common.php');
auth_check($auth[$sub_menu], 'w');
check_token();
// 변수 설정입니다. 필요에 맞게 설정하세요.
$year = $_POST['year'];
$cut = $_POST['number'];
$min = 10; // 그 해에 포인트가 10건 이하이면 압축하지 않습니다.
$expire = preg_replace('/[^0-9]/', '', $_POST['po_expire_term']);
// 포인트 백업 테이블이 있는지 검사한다.
if(!sql_query(" DESCRIBE {$g5['point_table']}_backup ", false)) {
// 포인트 백업 테이블을 만듭니다.
$sql = "create table `{$g5['point_table']}_backup` (
`po_id` int(11) NOT NULL auto_increment,
`mb_id` varchar(20) NOT NULL default '',
`po_datetime` datetime NOT NULL default '0000-00-00 00:00:00',
`po_content` varchar(255) NOT NULL default '',
`po_point` int(11) NOT NULL default '0',
`po_use_point` int(11) NOT NULL default '0',
`po_expired` tinyint(4) NOT NULL default '0',
`po_expire_date` date NOT NULL default '0000-00-00',
`po_mb_point` int(11) NOT NULL default '0',
`po_rel_table` varchar(20) NOT NULL default '',
`po_rel_id` varchar(20) NOT NULL default '',
`po_rel_action` varchar(100) NOT NULL default '',
PRIMARY KEY (`po_id`),
KEY `index1` (`mb_id`,`po_rel_table`,`po_rel_id`,`po_rel_action`),
KEY `index2` (`po_expire_date`)
) ";
sql_query($sql, false);
}
// po_datetime을 기준으로 해당 연도의 포인트 개수와 포인트 총합을 가져옴. (항목 많은 순서로 정렬)
$sql = " select mb_id, count(po_point) as cnt, sum(po_point) as sum from {$g5['point_table']} where po_datetime like '{$year}%' ";
$sql .= " group by mb_id having cnt > '{$min}' order by cnt desc ";
if ($cut) $sql .= " limit {$cut} ";
$qry = sql_query($sql);
$total_cnt = 0;
for($i=0; $row = sql_fetch_array($qry); $i++) {
$whereclause = " mb_id = '{$row['mb_id']}' and po_datetime like '{$year}%' ";
// 일단 백업테이블로 항목을 복사
$sql = "insert into `{$g5['point_table']}_backup` select * from `{$g5['point_table']}` where {$whereclause}";
sql_query($sql);
// 복사했으니 삭제해버리기
$sql = " delete from `{$g5['point_table']}` where {$whereclause} ";
sql_query($sql);
// 옮겼으니 압축된 항목 삽입하기
insert_point($row['mb_id'], $row['sum'], "{$year}년 포인트 내역 - 압축", "@point_zip", $row['mb_id'], $member['mb_id'] ."-". uniqid(''), $expire);
// 압축한 건수를 더함
$total_cnt += $row['cnt'];
}
echo "<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">";
$msg = "{$i} 명의 {$year} 년도 포인트 {$total_cnt} 건을 정리하였습니다.";
if ($cut) {
$g5['title'] = '포인트관리';
include_once ('./admin.head.php');
echo $msg;
if($i == $cut) echo "<br>F5(새로고침)를 누르면 추가로 적용됩니다. <a href=\"./point_list.php?{$qstr}\">[ 여기 ]</a> 를 누르시면 포인트관리 페이지로 이동됩니다.";
include_once ('./admin.tail.php');
} else {
alert($msg, './point_list.php?'.$qstr);
}
2. adm / point_list.php 182줄 페이징 아래에 내용 추가
<h2 class="h2_frm">포인트 내역 압축</h2>
<form name="fpointlist1" method="post" id="fpointlist1" action="./point_zip.php" autocomplete="off">
<div class="tbl_frm01 tbl_wrap">
<table>
<colgroup>
<col class="grid_4">
<col>
</colgroup>
<tbody>
<tr>
<th scope="row"><label for="year">압축년도<strong class="sound_only">필수</strong></label></th>
<td>
<input type="text" name="year" value="<?php echo $year; ?>" id="year" class="required frm_input" required>
예) <?php echo date("Y"); ?> (숫자만 입력하세요)
</td>
</tr>
<tr>
<th scope="row"><label for="number">압축회원수<strong class="sound_only">필수</strong></label></th>
<td>
<input type="text" name="number" value="<?php echo $number; ?>" id="number" class="frm_input">
인원수 입력하면 포인트 적립건수가 많은 회원중 입력숫자만큼만 압축합니다
</td>
</tr>
</tbody>
</table>
</div>
<div class="btn_confirm01 btn_confirm">
<input type="submit" value="확인" class="btn_submit btn">
</div>
</form>
댓글목록
등록된 댓글이 없습니다.