테스트 사이트 - 개발 중인 베타 버전입니다

포인트게임 횟수제한 채택완료

강낭콩콩이 4년 전 조회 2,616

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

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

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

댓글을 작성하려면 로그인이 필요합니다.

답변 3개

채택된 답변
+20 포인트
B
4년 전

</p>

<p>/*</p>

<p>코드 없을 때, date('Y-W')라 적었었는데 연도 바뀜을 생각 못했네요.</p>

<p>아무튼, "주 단위" 제한하려면 그냥 $sql에서 조건 바꿔주면 됩니다.</p>

<p>*/</p>

<p>$sql = " ... and po_rel_action BETWEEN '2021-11-07 00:00:00' AND '2021-11-13 23:59:59' ... ";</p>

<p>// 또는</p>

<p>$sql = " ... and DATE(po_rel_action) BETWEEN '2021-11-07' AND '2021-11-13' ... ";</p>

<p>/*</p>

<p>오늘 날짜가 속한 일요일, 토요일 [또는 월요일, 일요일]을 구하는 방법은 다양합니다.</p>

<p>date('w') = 0~6 (0=일, 1:월, ..., 5:금, 6:토) 값을 이용해 날짜를 그만큼 빼주면 "일요일"이 나오고</p>

<p>이 값에 6일을 더해주면 "토요일"이 나오죠.</p>

<p>strtotime() 함수를 사용해도 되고요.</p>

<p>*/</p>

<p>

로그인 후 평가할 수 있습니다

답변에 대한 댓글 3개

강낭콩콩이
4년 전
말씀종합해보면

[code]
/*
코드 없을 때, 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']; // ※ 문자열 '로 감싸주기
?>

[/code]
B
BiHon
4년 전
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)값이 이번주에 속한 기간 내에 몇 건이나 있는지 체크.
당연히 주간 제한.

짧은 코드니까 이해 후 응용&활용해보세요. 그냥 복사&붙여넣기만 하면 늘지 않습니다.
[code]
// 일일 제한
$gametime = G5_TIME_YMD;
$sql = " select count(*) as cnt from g5_point
where po_rel_table = '@lucky'
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 = '@lucky'
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 = '@lucky'
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'];
[/code]
강낭콩콩이
4년 전
감사합니다 !
이제 이해갔습니다.!
열심히 응용해보겠습니다!

댓글을 작성하려면 로그인이 필요합니다.

B
4년 전

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

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

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

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

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

로그인 후 평가할 수 있습니다

답변에 대한 댓글 5개

강낭콩콩이
4년 전
말씀해주신 부분이면..

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

[/code]

이거를ㄹ


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

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

[code]
//오늘 가능한 게임횟수 검사
$gametime = date('Y-m'); // 예) 2021-11
$sql = " select count(*) as cnt from g5_point
where po_rel_table = '@lucky'
and mb_id = '$member[mb_id]'
and substring(po_rel_action,1,7) = '{$gametime}' ";
$row = sql_fetch($sql);
$today_cnt = $row['cnt']; // ※ 문자열 '로 감싸주기
[/code]
※ 주 단위로 하려면 po_rel_action BETWEEN '시작일' AND '종료일' 처럼 지정해주면 되고요.
현재 날짜의 요일값(0:일 ~ 6:토) 이용해서 일~토, 월~일 쉽게 구할 수 있습니다.
강낭콩콩이
4년 전
감사합니다. G5_TIME_YMDHIS 상수는 있는걸로 확인됩니다.
말씀해주신 대로 처리를 하면.

[code]



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

[/code]


이렇게 처리를 하여도될까요 ?! 이제맞을까요 ??
B
BiHon
4년 전
"월단위" 제한이니까 이미 남긴 댓글처럼 Y-m까지만 체크해야죠.
G5_TIME_YMD 사용한다면 그냥 "일단위" 제한이겠고요.
강낭콩콩이
4년 전
말씀해주신 대로면 주단위 지정하고싶으면.

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

[/code]

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

댓글을 작성하려면 로그인이 필요합니다.

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

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

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

강낭콩콩이
4년 전
그렇다면. 지금현재 횟수체크 검사를 아래처럼 하고있습니다.

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

[/code]

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인