PHP / MySQL ile Senaryo Planlama - Mantık ile yardım

1 Cevap php

Ben kullanıcıların ekleyebilirsiniz küçük bir script geliştirmek için arıyorum "zamanlama." Ancak, DB yapısı ve nasıl veritabanında olayların girdi "zaman" oluşturmak için nasıl mantığını belirleyen biraz yardıma ihtiyacım var.

Unutulmaması gereken bir şey, ancak, kullanıcılar kendi "zamanlama" girdiğinizde, onlar kesin tarihleri ​​girerek olmayacak olmasıdır. Bunun yerine, "Haftanın günlerini. 'Girecekler Biraz bir 'tekrarlanan' randevu gibi.

Örneğin, kullanıcı A aşağıdaki zaman çizelgesi girebilirsiniz:

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

Gördüğünüz gibi, ben, ille tarihleri ​​kesin değil genel 'haftanın günlerini' kullanmak için bir yol arıyorum.

Bu düşünceyle, ne sonunda, ben mevcut kez aramak için veritabanını "sorgulama" olabilir bilerek, veritabanında bu depolamak için en iyi yolu olacaktır.

Ben milisaniye veya saniye bunları girmeliyim? "0" Pazar günü 0:00 olmak?

Herhangi bir öneriniz çok iyi olurdu.

Teşekkürler!

1 Cevap

Her şeyden önce, MySQL a time data type içerir. Ben çok yararlanmak öneririz.

Neyse, tablolar için (bu bir acadmic planlaması için, ama aynı temel fikirleri geçerlidir):

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

Şimdi, biri 1 ve 2 arasında bir Pazartesi günü geçerli olup olmadığını görmek için yapmanız gereken istediğiniz tüm olduğu:

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

Orada kontrol ediyoruz ne zaman ile $mytime olarak değiştirin.