등록된 모든회원에게 포인트 100을 일괄지급하려고 합니다 어떻게 해야...??
본문
등록된 모든 회원에게 포인트 100을 모두에게 주려고 합니다.
일괄지급하려면 어떻게 해야 하나요.?
답변 3
전체 회원 3만명이라면
select 쿼리 9만번 , insert쿼리 3만번, update쿼리 3만번 정도 해야 할 것입니다
브라우저가 버티지 못하는 것이 아니라 디비 및 php에서 timeout 걸려 끝까지 진행 되지않겠군요
function insert_point로 한명씩 처리해서는 안될 것이고
회원을 1천~2천명씩 추출해서 일괄 처리하도록 코드를 만들면 되겠습니다
(이미 처리가 된 회원이 있다면 제외하는 코드를 넣어여 합니다)
대충 큰 줄기만 설명 하면 방법은 이렇습니다
$ss, $ee 는 1~ 1000, 1001~2000 이렇게 들어가도록 for문으로 구성(mb_no 값으로 1000명씩 추출)
for($i=0; ~~~){
$qq=sql_query("select mb_id, mb_point from {$g5['member_table']} where mb_leave_date='' and mb_intercept_date='' and mb_no > $ss and mb_no < $ee " );
위에서 나온 값으로 입력 쿼리 생성
$point = 100;
while($row = sql_fetch_array($qq)){
$qry .=$deli. "('$mb_id','$date', '$content','$point' ~~~~ 이런 형식
$deli =',';
1000명에 대한 위 쿼리가 완료되면 insert
sql_query("insert into {$g5['member_table']} (mb_id,po_datetime,~~~) values $qry ");
3만명에 대하여 위 쿼리 실행 후 모든 회원 합계 포인트 update
sql_query("update {$g5['member_table']} set mb_point = mb_point +$point where mb_leave_date='' and mb_intercept_date='' ");
찾아보니 제가 필요했던 소스가 있더군요
저처럼 필요하신 분이 계실것이라 생각하고 참고자료로 적어놓습니다.
응용해서 잘쓰세요
<?php
// 전체 회원에게 포인트 일괄 지급하는 소스 코드
// 탈퇴회원 및 접근금지 회원은 제외
include_once ("./_common.php");
$point = "3000"; //지급포인트
$point_msg = "추석 특별 포인트 지급"; // 포인트내역
if ($is_admin != "super")
echo "관리자로 접속하세요.";
else
{
$sql = " select mb_id from $g5[member_table] where mb_id<>'{$config[cf_admin]}' and mb_leave_date='' and mb_intercept_date='' ";
$result = sql_query($sql);
while($row = sql_fetch_array($result))
{
$mb_id = $row[mb_id];
insert_point($mb_id, $point, $point_msg, "@event", $mb_id, G5_TIME_YMDHIS);
}
echo "$point_msg 완료";
}
?>