뭔가 껄쩍지근한 걸 해보고 싶은데요,,ㅎ

뭔가 껄쩍지근한 걸 해보고 싶은데요,,ㅎ

QA

뭔가 껄쩍지근한 걸 해보고 싶은데요,,ㅎ

본문

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($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']} ");
        }

에서
두번째 비교문인
 }else if($row['wr_datetime'] < 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일 지나면

 

이런식으로 체크가 되야하지 않을까 하네요?

대강 무슨말을 전달하는지 의도를 파악하셨으리라 봅니다.

아니죠 지금은 제가 위에 예시로 해놓은것은 오늘 날짜를 기준으로 한것이고
자동으로 변수로 금일을 담아두고
$day1 = 금일 - 1일
$day2 = 금일 - 2일
$day3 = 금일 - 3일

이렇게 변수로 할당해놓으면 날짜가 바뀌면 자동으로 변수의 날짜가 바뀌겠죠?

if($row['wr_datetime'] == $day1) // 1일 지나면
if($row['wr_datetime'] == $day2) // 2일 지나면
if($row['wr_datetime'] == $day3) // 3일 지나면
이런식인데 앞에 wr_datetime 자체를 뒷부분 시간을 날려버리고
년월일이 같은지만 체크하면 되지싶은데요.

그러면 금일은 서버타임으로 하고

$day1 = date("Y-m-d H:i:s", strtotime("-1 day")); // 어제
이런식으로 변수정하고,,하라는 말씀이신거죠?

금일은 어떻게 해야 할지,,,ㅋ

echo G5_TIME_YMD 이렇게 하시면 오늘 날짜가 나옵니다.

감사합니다. 그럼 $day = date("G5_TIME_YMD");
$day1 = date("Y-m-d H:i:s", strtotime("-1 day")); // 어제
이런식으로 하면 될지...ㅋ

죄송,,프로그래머가 아니라 뒤죽박죽이에요,,

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

회원로그인

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