2

ユーザーが「スケジュール」を挿入できる小さなスクリプトを開発したいと思っています。ただし、DB構造を作成する方法と、データベース内のイベントの「時間」を入力する方法のロジックを決定するためのヘルプが必要です。

ただし、ユーザーが「スケジュール」を入力するときに、正確な日付は入力されないことに注意してください。代わりに、「曜日」を入力します。「定期的な」予定のようなものです。

たとえば、ユーザーAは次のタイムスケジュールを入力できます。

MWF-8:00am-10:00am MW-2:00pm-3:00pmなど..

ご覧のとおり、必ずしも正確な日付ではなく、一般的な「曜日」を使用する方法を探しています。

これを念頭に置いて、これをデータベースに保存するための最良の方法は何でしょうか。最終的には、データベースに「クエリ」を実行して利用可能な時間を検索する可能性があることを知っています。

ミリ秒または秒で入力する必要がありますか?「0」は日曜日の午前12:00ですか?

どんな提案も素晴らしいでしょう。

ありがとう!

4

1 に答える 1

3

まず、MySQLには時間データ型が含まれています。それを利用することを強くお勧めします。

とにかく、あなたのテーブルのために(これはアカデミックスケジューリングのためですが、同じ基本的な考え方が当てはまります):

DaysOfWeek
----------
DowID int
DayOfWeek varchar(10)

Users
------------------------
UserID int autoincrement
UserName varchar(50)
PassHash varbinary(100)
FirstName varchar(50)
LastName varchar(50)
DOB datetime

Semesters
----------------------------
SemesterID int autoincrement
SemesterName varchar(50)
SemesterNumber int
AcademicYear int
CalendarYear int

Classes
-------------------------
ClassID int autoincrement
ClassName varchar(50)
ClassCode varchar(25)

Schedule
----------------------------
ScheduleID int autoincrement
UserID int
SemesterID int
DowID int
ClassID int
BeginTime time
EndTime time

さて、月曜日の1時から2時の間に誰かが対応可能かどうかを確認するために必要なのは次のとおりです。

select
    count(*) as classes
from
    schedule sch
    inner join users u on
        sch.userid = u.userid
    inner join semesters sem on
        sch.semesterid = sem.semesterid
where
    u.username = 'rmcdonald'
    and sem.academicyear = 2009
    and sem.semesternumber = 1
    and sch.dowid = dayofweek($mytime)
    and $mytime between sch.begintime and sch.endtime

$mytimeそこでチェックしている時間に置き換えてください。

于 2009-09-02T02:05:35.073 に答える