2013-01-11 6 views
0

시간 슬롯을 반환하는 mysql 쿼리가 있습니다. starttimeb, endtimeb 및 employeeb를 포함하는 timeslots라는 테이블이 있습니다. 예약 된 시작 시간 및 종료 시간 필드는 일정이라는 다른 테이블에서 가져옵니다. 문제는 타임 슬롯 테이블에 정의 된 약속 만 할당 할 수 있다는 것입니다.시작 시간과 종료 시간 및 실행 시간이 포함 된 mysql 시간 슬롯 쿼리

예를 들어 슬롯 8시에서 10 시까 지, 10시에서 12시, 12시에서 14시, 14시에서 16시 사이 및 16시에서 18시 사이 일정표에서 시작 시간이 08:00이고 종료 시간이 18:00 인 예약 된 항목이 하나 있으면 사용할 수 있습니다. 영업 시간은 8 시부 터 18 시까 지로 정의되어 있으므로 그 시간 동안 2 시간의 시간 블록 만 사용할 수 있으며 타임 슬롯 테이블에 제공된 2 시간 이상의 시간 간격으로 약속을 예약 할 수 있습니다. 예를 들어 if 오전 8 시부 터 12 시까 지 예약되었습니다. 12 시부 터 14 시까 지, 14 시부 터 16 시까 지, 16 시부 터 18 시까 지 이용 가능합니다. 또는 오전 9 시부 터 11 시까 지 12 시부 터 14 시까 지 예약 한 경우, 14 시부 터 16시 사이 및 16 시부 터 18시 사이를 이용할 수 있습니다.

mysql_query("SELECT * 
FROM timeslots 
LEFT OUTER JOIN 
(SELECT 
    starttime 
, endtime 
, custno 
, id 
FROM schedule 
WHERE schedule.date = '2012-12-14' 
) AS a 
ON a.starttime >= timeslots.starttimeb 
AND a.endtime <= timeslots.endtimeb 
AND a.custno = timeslots.custnob"); 

위의 질의는 이런 일을 반환 ... 내 응용 프로그램에이 STARTTIME이 경우는 null 슬롯을 사용할 수 있는지 설정되어 있습니다.

 
starttimeb endtimeb custnob   starttime endtime custno   id 
08:00:00 10:00:00 Michael W Sloan 08:00:00 10:00:00 Michael W Sloan 15670 
10:00:00 12:00:00 Michael W Sloan NULL  NULL  NULL   NULL 
12:00:00 14:00:00 Michael W Sloan NULL  NULL  NULL   NULL 
14:00:00 16:00:00 Michael W Sloan 14:00:00 16:00:00 Michael W Sloan 15673 
16:00:00 18:00:00 Michael W Sloan NULL  NULL  NULL   NULL 
08:00:00 10:00:00 James T Reesor  08:00:00 10:00:00 James T Reesor 15664 
10:00:00 12:00:00 James T Reesor  NULL  NULL  NULL   NULL 
12:00:00 14:00:00 James T Reesor  NULL  NULL  NULL   NULL 
14:00:00 16:00:00 James T Reesor  NULL  NULL  NULL   NULL 
16:00:00 18:00:00 James T Reesor  16:00:00 18:00:00 James T Reesor 15674 
08:00:00 10:00:00 Carlton L. Pierce NULL  NULL  NULL   NULL 
10:00:00 12:00:00 Carlton L. Pierce NULL  NULL  NULL   NULL 
12:00:00 14:00:00 Carlton L. Pierce 12:00:00 14:00:00 Carlton L. Pierce 15671 
14:00:00 16:00:00 Carlton L. Pierce NULL  NULL  NULL   NULL 
16:00:00 18:00:00 Carlton L. Pierce NULL  NULL  NULL   NULL 
08:00:00 10:00:00 Frankie D Aldridge NULL  NULL  NULL   NULL 
10:00:00 12:00:00 Frankie D Aldridge NULL  NULL  NULL   NULL 
12:00:00 14:00:00 Frankie D Aldridge NULL  NULL  NULL   NULL 
14:00:00 16:00:00 Frankie D Aldridge NULL  NULL  NULL   NULL 
16:00:00 18:00:00 Frankie D Aldridge NULL  NULL  NULL   NULL 
08:00:00 12:00:00 Michael W Sloan 08:00:00 10:00:00 Michael W Sloan 15670 

답변

0

질문이 무엇인지 이해하기 어렵지만, 문제는

ON a.starttime >= timeslots.starttimeb 
AND a.endtime <= timeslots.endtimeb 

을 변경, 당신은 일정에서 어떤 행이 슬롯 테이블의 시간과 겹치는 경우 찾을하려는 경우 어떤 오직 완전 전이나 후에 완전히 TI하지도 일정 행 일치하는

ON a.starttime < timeslots.endtimeb 
AND a.endtime > timeslot.starttimeb 

으로, 시작 모두 일정 행 일치하고 주어진 시간 슬롯에서 끝나는 meslot이 도움이 될 수 있습니다.

+0

내 길에 나를 잡은 위대한. 나는 a.starttime <= timeslots.starttimeb AND a.endtime> = timeslots.endtimeb –

+0

을 사용했습니다. 어려운 질문이었습니다. 도움에 감사드립니다! –

관련 문제