염치불구하고 고수님께 체크기능 도움을 요청합니다.

염치불구하고 고수님께 체크기능 도움을 요청합니다.

QA

염치불구하고 고수님께 체크기능 도움을 요청합니다.

본문

염치불구하고 체크기능을 좀 강화시킬려고 도움을 요청해요...

 

$checkcnt = sql_fetch("select count(*) as cnt from $write_table where tch_id='$tch_id' and Cdate='$Cdate' and Ctime='$Ctime' ");
if($checkcnt[cnt]) {

   alert("{$tch_name} 선생님에게 기존 예약된 수업이 있습니다.\\n\\n* 확인 수업일자 : {$Cdate} / {$Ctime}  ");

}

 

위의 소스는 제가 운영하는 화상영어에서 예약을 할때에 기존에 수업이 있는지 없는지를 체크하는 소스입니다.

예약할때 넘어가는 값은 Cdate와 Ctime 그리고 선생님의 정보가 업데이트 파일로 넘어가면 그 선생님에게 기존의 수업이 있는지를 체크하여 있으면 중복됐다고 알려주는 소스입니다.

 

여기서 체크기능을 강화하기 위하여~~........... 분이 문제입니다. 분이요~~~

예약할때 넘어가는 값이 하나 더 있습니다.수업시간이죠.. 그러니까 몇분을 수업하는 건지.. 몇분이 넘어갑니다.  다시말하면 형식이 16-02-01 18:00 20min 이 넘어가죠..

그 넘어가는 변수값은 $Cmin 입니다.

 

위의 소스는 수업시작만 체크를 하는 거죠.. 만약에 해당 샘이 18:00부터 20분간이라면 18:00~18:20 그러니까 끝나는 시간까지는 어랏트를 보여줘야 되나든 거죠..

 

신규 예약의 Cmin 20분이 입력되었다고 가정하면,

Ctime이 18:00 부터 18:20분까지의 값이 입력이 되면 체크를 해서 중복이 되었다고 메세지를 뿌려주는게 맞는것 같습니다.

 

//입력폼에서 입력되어 넘어오는 값

$Cdate ='16-02-01';
$Ctime = '18:00';

$Cmin = '20'; 

 

//수업날짜 형식은 16-02-01  수업분은 18:00 이니까
$start_time = $Cdate." ".$Ctime;
//끝나는 시간은
$end_time = date("y-m-d H:i", strtotime("$start_time + $Cmin min"));

 

시작과 끝의 변수는 찾겠는데요.. start_time과 end_time 안에 입력값이 포함된다면 체크하려 하려면 어떻게 해야하는지.. 어떤 함수를 써야하는지....

고수님께 여쭤봅니다.

감사합니다.

 

 

이 질문에 댓글 쓰기 :

답변 2

조회할 대상 필드가 datetime 형식이고 하나의 필드로 이루어져있나요?

 

아니면 날짜필드따로 시간필드가 따로되어있나요.

 

보통 datetime 테이블의경우 between을 많이 사용하는데 between도 mysql 의 하나의 함수이므로

데이터가 많을시 그닥 가벼운 녀석은 아닙니다.

둘다 알려드려 보자면.

 

 

select * from date_table

where date_fld between '2016-01-01 12:00' AND '2016-01-01 15:00'

 

or 

 

select * from date_table

where date_fld >= '2016-01-01 12:00' AND date_fld <= '2016-01-01 15:00'

 

 

//입력폼에서 입력되어 넘어오는 값

$Cdate ='16-02-01';
$Ctime = '18:00';

$Cmin = '20'; 

 

//수업날짜 형식은 16-02-01  수업분은 18:00 이니까
$start_time = $Cdate." ".$Ctime;
//끝나는 시간은
$end_time = date("y-m-d H:i", strtotime("$start_time + $Cmin min"));

 

 

 

$Etime = date("H:i", strtotime("$start_time + $Cmin min"));

 

//16년 02월 01일 중 Ctime 이 $Ctime 보다 같거나 크며 $Etime 보다 작거나 같은걸 셀렉트 

$checkcnt = sql_fetch("select count(*) as cnt from $write_table where tch_id='$tch_id' and Cdate='$Cdate' and (Ctime>='$Ctime' and Ctime<='$Etime') "); 

 

만약 필드형식 차이로 (문자열등) 정상적인 동작이 안된다면 

SUBSTRING_INDEX 함수로 특정문자열을 날린후 하셔도 됩니다. 

 

 

 

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

회원로그인

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