뭔가 껄쩍지근한 걸 해보고 싶은데요,,ㅎ
본문
m3크론으로 하루에 2번 자동업데이트 시키려는데요 업데이트 횟수는 크론에서 설정하면 되는거 같구요,,,
bo_1='".G5_TIME_YMD."처러 bo_1을 오늘 날짜로 업데이트시키고
g5_write_test 테이블의 wr_datetime을 기준으로 글 등록일이
오늘이면 wr_210을 접수로
1일 지나면 wr_210을 1단계
2일 지나면 wr_210을 2단계
3일 지나면 wr_210을 3단계
4일 지나면 wr_210을 완료로 변경시키려는데
< G5_TIME_YMD 부분을 어떻게 해야 할지요
< G5_TIME_YMD -1day 이런식으로 할수있을까요?
그리고 크론으로 돌릴거 같으면 sql_query(" update g5_board set bo_1_subj='단계변경', bo_1='".G5_TIME_YMD."' where bo_table ='$g5_write_test' "); 이게 없어도 되는거 아닐까요?
--------------------------------------------------------------------
if(G5_TIME_YMD != $board['bo_1']){
$sql = " select wr_id, wr_210, wr_datetime from g5_write_test where wr_is_comment = 0 order by wr_id desc limit 0, 100
";
$result = sql_query($sql);
for ($i=0; $row = sql_fetch_array($result); $i++) {
if($row['wr_datetime'] = G5_TIME_YMD ){
sql_query(" update g5_write_test set wr_210='접수' where wr_id = {$row['wr_id']} ");
}else if($row['wr_datetime'] < G5_TIME_YMD ){
sql_query(" update g5_write_test set wr_210='1단계' where wr_id = {$row['wr_id']} ");
}else if($row['wr_datetime'] < G5_TIME_YMD ){
sql_query(" update g5_write_test set wr_210='2단계' where wr_id = {$row['wr_id']} ");
}
}else if($row['wr_datetime'] < G5_TIME_YMD ){
sql_query(" update g5_write_test set wr_210='3단계' where wr_id = {$row['wr_id']} ");
}
}else if($row['wr_datetime'] < G5_TIME_YMD ){
sql_query(" update g5_write_test set wr_210='완료' where wr_id = {$row['wr_id']} ");
}
}
sql_query(" update g5_board set bo_1_subj='단계변경', bo_1='".G5_TIME_YMD."' where bo_table ='$g5_write_test' ");
}
답변 3
우선 , 접근에 오류가 있습니다.
G5_TIME_YMD 는
config.php 파일에 정의되어있습니다.
define('G5_TIME_YMD', substr(G5_TIME_YMDHIS, 0, 10));
이렇게 말이죠
상수입니다.
그리고,G5_TIME_YMDHIS는 바로 위에
define('G5_TIME_YMDHIS', date('Y-m-d H:i:s', G5_SERVER_TIME));
로 정의 되어있습니다.
여기에서,
조금만 생각해보시면 의도하시는 바가 구현이 안된다는것을 발견하실겁니다.
php의 date() 함수를 사용하시거나
mysql의 date() 함수를 사용하시거나
원한는 일자를 추출하는게 필요합니다.
즉, 변수에 대입하는 값 자체를 다르게 처리하는게 현명한 방법일겁니다.
변수에서
$row['wr_datetime'] < G5_TIME_YMD
이러한 비교는 실행하기 싫다는 표현으로 보여집니다.
왜냐하면
G5_TIME_YMD 는 연월일까지만 기록된 문자열상수이고
wr_datetime 은 연월일시분초까지 기록된 날짜형값을문자열로가져온 변수값입니다.
그러면 어떻게 처리하는게 좋을까요?
bo_1에 날짜를 기록하는건 무방합니다.
날짜를 비교하기위해서 문자열을 숫자로 인식시켜서 비교하는것까지도 좋습니다.
유니코드값이 숫자가 큰것이 크다고 인식된문자가 될테니 무시하고
그러면 날짜값을 가져오는 변수의 내용이 달라져야합니다.
$sql = " select wr_id, wr_210, wr_datetime from g5_write_test where wr_is_comment = 0 order by wr_id desc limit 0, 100
";
로 가져오는 내용을
$sql = " select wr_id, wr_210, wr_datetime, date(wr_datetime) today from g5_write_test where wr_is_comment = 0 order by wr_id desc limit 0, 100
";
와 같이 빨간색 글짜를 추가하시고
if($row['wr_datetime'] = G5_TIME_YMD ){
와 같이 구현된 각종 비교문을
if($row['today'] == G5_TIME_YMD ){
와 같이 전부 변수명을 변경하셔야합니다.
위의 비교문에서 = 한개만 사용하면 대입문입니다.
== 두개를 사용하셔야 합니다.
애초에 if문 사용시 해당 날짜가 크다 작다가 아니라
오늘이면 wr_210을 접수로
1일 지나면 wr_210을 1단계
2일 지나면 wr_210을 2단계
3일 지나면 wr_210을 3단계
4일 지나면 wr_210을 완료로 변경시키려는데
if($row['wr_datetime'] = G5_TIME_YMD) // 오늘이면
if($row['wr_datetime'] < G5_TIME_YMD) // 1일 지나면
여기에서 1일 지나면 자체를 < 크다로 표현하시는것보다
현재 날짜 - 1일 = 2019-04-15 이런식으로
1일 = 2019-04-15
2일 = 2019-04-14
3일 = 2019-04-13
이렇게 날짜 자체를 뽑아오고
if($row['wr_datetime'] == 2019-04-15) // 1일 지나면
if($row['wr_datetime'] == 2019-04-14) // 2일 지나면
if($row['wr_datetime'] == 2019-04-13) // 3일 지나면
이런식으로 체크가 되야하지 않을까 하네요?
대강 무슨말을 전달하는지 의도를 파악하셨으리라 봅니다.
echo G5_TIME_YMD 이렇게 하시면 오늘 날짜가 나옵니다.