0

タイムスロットを返す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
4

1 に答える 1

1

質問が何であるかを理解するのは難しいですが、問題がスケジュールの行がタイムスロットテーブルの時間と重複しているかどうかを確認したい場合は、変更します

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

これは、特定のタイムスロット内で開始および終了するスケジュール行のみに一致します。

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

問題のタイムスロットの前でも後でもないスケジュール行に一致するものが役立つ場合があります。

于 2013-01-11T22:38:03.870 に答える