2

システムはそれ自体です。講師は、彼らの空き状況(月曜日から日曜日)とその日の利用可能な時間枠(0700から1400)(つまり、午前7時から午後2時)を提供します。

私は、この情報を保存して検索し、利用可能な講師を見つけるための最良の方法を見つけようとしています。検索は、毎日のシステム(つまり、曜日-月、火、水など)でのみ実行する必要があります。

私の計画したインフラストラクチャ:

//Tutor Availability
---------------------------------------------------------------------------
  tutorID  |  monday   |  tuesday  | wednesday  | thursday   |   friday   |
---------------------------------------------------------------------------
   27      | 0700-1200 |   NULL    | 1400-1800  |  NULL      |    NULL    |
---------------------------------------------------------------------------
   35      |   NULL    | 1400-1600 |    NULL    |  NULL      | 1100-1900  |

//Scheduled tutor sessions
------------------------------------
  tutorID  |    day    |  time     | 
------------------------------------
   27      |  monday   | 0700-0900 | 
------------------------------------
   35      |  friday   | 1300-1500 |

クエリ:SELECT tutorid FROM tutoravailability WHERE 'monday'=... 0900-1100の間に利用可能であり、スケジュールされたチューターセッションにはありません。

私は、MySQLでこれらの時間間隔を検索(および保存)する方法についてずっと探し続けてきました。これは、1日24時間の時間間隔を保存するための最良の方法ですか?これらの間隔の間を検索することさえ可能でしょうか?私は間違った方法でこれにアプローチしていますか?任意の洞察をいただければ幸いです。

更新されたインフラストラクチャ

//Tutor Availability
-----------------------------------------------------
  tutorID  |  day   | start_time | end_time  |  PK  | 
-----------------------------------------------------
   27      |  mon   |   0700     |   1200    |  1   |
-----------------------------------------------------
   27      |  fri   |   1400     |   1800    |  2   |
-----------------------------------------------------
   35      |  tue   |   1100     |   1600    |  3   |
//Scheduled tutor sessions
--------------------------------------------------------
  tutorID  |    day    |  start_time | end_time  |  PK |
--------------------------------------------------------
   27      |    mon    |     0800    | 1000      |  1  |
--------------------------------------------------------
   27      |    fri    |     1600    | 1800      |  2  |

したがって、このシステムを使用すると、利用可能な時間を検索するのがはるかに簡単になります。しかし、重複がないことを確認するために、スケジュールされたレッスンと可用性を比較する方法については、まだ途方に暮れています。

SELECT tutorID 
FROM tutoravailability WHERE day = 'fri' 
AND start_time <= '1400' 
AND end_time >= '1530'

Scheduled tutor sessions予約の重複を避けるために、このクエリをテーブルと比較する方法がわかりません。

最終更新

スケジュールされたチューターセッションと重複しないようにするために、MySQLBETWEEN句を使用して開始時刻と終了時刻を検索します。

4

2 に答える 2

4

2つの列を使用して時間間隔を保存すると、SQLクエリを使用して検索を実行するのがはるかに簡単になります。

つまり、tutorID、day、startTime、endTime

于 2013-01-15T06:16:21.093 に答える
0

ビットフラグを使用して、可用性(24ビット)とスケジュールされた時刻(24ビット)を示すことができます。次に、24ビットを使用して、各日の利用可能な時間とスケジュールされた時間を表すことができます。

先生の空き状況の表で、「1」は「利用可能」を表し、「0」は利用不可を表します。スケジュールされたテーブルで、「0」はスケジュール済みを表し、「1」はスケジュールされていないことを表します。

したがって、使用可能な間隔0900-1100はPOW(2,9)|として保存できます。POW(2,10)| POW(2,11); スケジュールされた1000-1200は、^(POW(2,10)| POW(2,12))として保存できます。

次に、次のクエリで、家庭教師の空き状況を確認できます。月曜日の午前9時から午前11時まで利用できます。

SELECT ta.tutorid FROM tutoravailability ta, tutorscheduled ts 
WHERE ta.tutorid = ts.tutorid AND ts.day = 'monday' 
      AND (ta.monday & ts.time & (POW(2,9) | POW(2,10) | POW(2,11))) = (POW(2,9) | POW(2,10) | POW(2,11))
于 2013-01-15T06:35:50.617 に答える