염치불구하고 고수님께 체크기능 도움을 요청합니다.
본문
염치불구하고 체크기능을 좀 강화시킬려고 도움을 요청해요...
$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 함수로 특정문자열을 날린후 하셔도 됩니다.
감사합니다. 로핑님..
between을 사용하는 군요.. 많은 도움이 되었습니다.
진심으로 감사드립니다.