タイムスロットを返すmysqlクエリがあります。starttimeb、endtimeb、employeebを含むタイムスロットというテーブルがあります。予約された開始時間フィールドと終了時間フィールドは、スケジュールと呼ばれる別のテーブルから取得されます。問題は、タイムスロットテーブルで定義された予定しか割り当てられないことです。
たとえば、スロット8:00〜10:00、10:00〜12:00、12:00〜14:00、14:00〜16:00、16:00〜18:00がある場合は利用できません。スケジュールテーブルで開始時刻が08:00、終了時刻が18:00のスケジュールされたアイテム1つ。営業時間は8:00から18:00と定義されているため、その時間帯は2時間の時間ブロックしか利用できず、タイムスロットテーブルに記載されている2時間以上の時間枠で予約できる可能性があります。 8:00〜12:00が予約されています。12:00〜14:00、14:00〜16:00、16:00〜18:00のみを利用できるようにします。または、9:00〜11:00のみが予約された場合、12:00〜14:00、14:00〜16:00、16:00〜18:00が利用可能になります。
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