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

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

QA

SIR 제작의뢰 - 견적무료/익명보정/호스팅, DB 이전/단기개발. 이젠 ' 의뢰인'이 원하는 '제작자'에게만 연락처를 알릴 수 있습니다.

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

본문

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 자체를 뒷부분 시간을 날려버리고
년월일이 같은지만 체크하면 되지싶은데요.

그누위즈님의 답변

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

주소복사
답변의 댓글
답변을 작성하시기 전에 로그인 해주세요.
전체 34,711
고마운 분의 도움으로 질문을 해결하셨다면, 채택을 눌러서 감사의 마음을 전하세요.
어떻게 질문해야 할지 모른다면 질문하는 방법을 읽어 보신후 질문해 보세요.
QA 내용 검색

회원로그인

(주)에스아이알소프트 (06253) 서울특별시 강남구 도곡로1길 14, 6층 624호 (역삼동, 삼일프라자) 대표메일:admin@sir.kr
사업자등록번호:217-81-36347 대표:홍석명 통신판매업신고번호:2014-서울강남-02098호 개인정보보호책임자:이총

© SIRSOFT