포인트게임 횟수제한

포인트게임 횟수제한

QA

포인트게임 횟수제한

본문

안녕하세요.
포인트게임 횟수제한을 주단위, 또는 월단위로 설정하려면..
어떻게 해야할까요 ?

현재
일단위 
$today_max = '1';

이렇게는 구현되어있는상태입니다.

이 질문에 댓글 쓰기 :

답변 3


/*
코드 없을 때, date('Y-W')라 적었었는데 연도 바뀜을 생각 못했네요.
아무튼, "주 단위" 제한하려면 그냥 $sql에서 조건 바꿔주면 됩니다.
*/
$sql = " ... and po_rel_action BETWEEN '2021-11-07 00:00:00' AND '2021-11-13 23:59:59' ... ";
// 또는
$sql = " ... and DATE(po_rel_action) BETWEEN '2021-11-07' AND '2021-11-13' ... ";
/*
오늘 날짜가 속한 일요일, 토요일 [또는 월요일, 일요일]을 구하는 방법은 다양합니다.
date('w') = 0~6 (0=일, 1:월, ..., 5:금, 6:토) 값을 이용해 날짜를 그만큼 빼주면 "일요일"이 나오고
이 값에 6일을 더해주면 "토요일"이 나오죠.
strtotime() 함수를 사용해도 되고요.
*/

말씀종합해보면


/*
코드 없을 때, date('Y-W')라 적었었는데 연도 바뀜을 생각 못했네요.
아무튼, "주 단위" 제한하려면 그냥 $sql에서 조건 바꿔주면 됩니다.
*/
$sql = " ... and po_rel_action BETWEEN '2021-11-07 00:00:00' AND '2021-11-13 23:59:59' ... ";
// 또는
/* $sql = " ... and DATE(po_rel_action) BETWEEN '2021-11-07' AND '2021-11-13' ... "; */
/*
오늘 날짜가 속한 일요일, 토요일 [또는 월요일, 일요일]을 구하는 방법은 다양합니다.
date('w') = 0~6 (0=일, 1:월, ..., 5:금, 6:토) 값을 이용해 날짜를 그만큼 빼주면 "일요일"이 나오고
이 값에 6일을 더해주면 "토요일"이 나오죠.
strtotime() 함수를 사용해도 되고요.
*/


//주 가능한 게임횟수 검사
$gametime = date('Y-W');    // < - Y-W 수정 
$sql = " select count(*) as cnt from g5_point
          where po_rel_table = '@event'
            and mb_id = '$member[mb_id]'
            and substring(po_rel_action,1,7) = '{$gametime}' ";  //<- 여기를 어떻게 해야할지모르겠습 
                                                                                    니다.ㅠㅠ 헷갈리네용 ㅠㅠ

$row = sql_fetch($sql);
$week_cnt = $row['cnt']; // ※ 문자열 '로 감싸주기
?>

po_rel_action 필드에 '2021-11-09 12:40:00'처럼 값이 들어가니까
여기에서 앞 10글자면 '2021-11-09' 값이 나오겠죠?
DB에 저장된 그 값과, 오늘 '2021-11-09[G5_TIME_YMD, date('Y-m-d')]'과 비교하는 것이 일일 제한.

앞의 7글자까지만 비교하면, '2021-11' 나오죠? 월간 제한.

참여일시(po_rel_action)에서 날짜(Y-m-d)값이 이번주에 속한 기간 내에 몇 건이나 있는지 체크.
당연히 주간 제한.

짧은 코드니까 이해 후 응용&활용해보세요. 그냥 복사&붙여넣기만 하면 늘지 않습니다.


// 일일 제한
$gametime = G5_TIME_YMD;
$sql = " select count(*) as cnt from g5_point
          where po_rel_table = ''
            and mb_id = '{$member['mb_id']}'
            and SUBSTRING(po_rel_action, 1, 10)='{$gametime}' ";
$row = sql_fetch($sql);
$today_cnt = $row['cnt'];

// 월간 제한
$gametime = date('Y-m');
$sql = " select count(*) as cnt from g5_point
          where po_rel_table = ''
            and mb_id = '{$member['mb_id']}'
            and SUBSTRING(po_rel_action, 1, 7)='{$gametime}' ";
$row = sql_fetch($sql);
$today_cnt = $row['cnt'];

// 주간 제한
$ts = strtotime('this week'); // 이번주 시작일 [월요일 시작] Timestamp
$week_start = date('Y-m-d', $ts); // 2021-11-08
$week_end = date('Y-m-d', $ts+(86400*6)); // 2021-11-14
$sql = " select count(*) as cnt from g5_point
          where po_rel_table = ''
            and mb_id = '{$member['mb_id']}'
            and DATE(po_rel_action) BETWEEN '{$week_start}' AND '{$week_end}' ";
// 또는 SUBSTRING(po_rel_action, 1, 10) BETWEEN '{$week_start}' AND '{$week_end}'
// 또는 DATE_FORMAT(po_rel_action, '%Y-%m-%d') BETWEEN '{$week_start}' AND '{$week_end}'
$row = sql_fetch($sql);
$today_cnt = $row['cnt'];

$month_max = 1; // 이런식으로 한달 최대치를 설정하고

하루치 참여횟수 가져오는 쿼리를 한달치로 변경하시면 됩니다

그렇다면. 지금현재 횟수체크 검사를 아래처럼 하고있습니다.


//오늘 가능한 게임횟수 검사
$gametime = G5_TIME_YMD;
$sql = " select count(*) as cnt from g5_point
          where po_rel_table = ''
            and mb_id = '$member[mb_id]'
            and substring(po_rel_action,1,10) = '{$gametime}' ";
$row = sql_fetch($sql);
$today_cnt = $row[cnt];
?>

일 단위 = date('Y-m-d')

주 단위 = date('Y-W')

  - 참고로 월요일 시작. 예) 11-01~11-07=44주차, 11-08~11-14=45주차

  - 일요일 시작으로 하려면, 날짜에서 하루 뺀 값으로 구하면 됩니다.

월 단위 = date('Y-m')

말씀해주신 부분이면..


//오늘 가능한 게임횟수 검사
$gametime = G5_TIME_YMD;
$sql = " select count(*) as cnt from g5_point
          where po_rel_table = ''
            and mb_id = '$member[mb_id]'
            and substring(po_rel_action,1,10) = '{$gametime}' ";
$row = sql_fetch($sql);
$today_cnt = $row[cnt];
?>



이거를ㄹ



//오늘 가능한 게임횟수 검사
$gametime = G5_TIME_YM;   <- 여기를 이렇게 수정하면될까용
$sql = " select count(*) as cnt from g5_point
          where po_rel_table = ''
            and mb_id = '$member[mb_id]'
            and substring(po_rel_action,1,10) = '{$gametime}' ";
$row = sql_fetch($sql);
$today_cnt = $row[cnt];
?>

질문의 코드만 보고 답을 하자면, 월 단위 제한을 하려면 두 곳 수정을 해야죠.
G5_TIME_YM 상수가 있는지 모르겠으나, 그냥 아래처럼 직접 실행 시점의 날짜 구하면 됩니다.


//오늘 가능한 게임횟수 검사
$gametime = date('Y-m'); // 예) 2021-11
$sql = " select count(*) as cnt from g5_point
          where po_rel_table = ''
            and mb_id = '$member[mb_id]'
            and substring(po_rel_action,1,7) = '{$gametime}' ";
$row = sql_fetch($sql);
$today_cnt = $row['cnt']; // ※ 문자열 '로 감싸주기

※ 주 단위로 하려면 po_rel_action BETWEEN '시작일' AND '종료일' 처럼 지정해주면 되고요.
현재 날짜의 요일값(0:일 ~ 6:토) 이용해서 일~토, 월~일 쉽게 구할 수 있습니다.

감사합니다. G5_TIME_YMDHIS 상수는 있는걸로 확인됩니다.
말씀해주신 대로 처리를 하면.





//주 가능한 게임횟수 검사
$gametime = G5_TIME_YMD;  // 아니면 date('Y-W')
$sql = " select count(*) as cnt from g5_point
          where po_rel_table = ''
            and mb_id = '$member[mb_id]'
            and substring(po_rel_action BETWEEN,0,6) = '{$gametime}' ";
$row = sql_fetch($sql);
$week_cnt = $row['cnt']; // ※ 문자열 '로 감싸주기




이렇게 처리를 하여도될까요 ?! 이제맞을까요 ??

말씀해주신 대로면 주단위 지정하고싶으면.


//주 가능한 게임횟수 검사
$gametime = date('Y-W');
$sql = " select count(*) as cnt from g5_point
          where po_rel_table = ''
            and mb_id = '$member[mb_id]'
            and substring(po_rel_action BETWEEN '0'and'6') = '{$gametime}' ";
$row = sql_fetch($sql);
$week_cnt = $row['cnt']; // ※ 문자열 '로 감싸주기



이렇게가 맞을까요 ?
자세히 알려주셔서 감사합니다.

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

회원로그인

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