我正在编写一个PHP/MySQL应用程序来跟踪预约情况,但是我在根据选择的任意条件查找下一个可用预约时遇到了困难。
CREATE TABLE IF NOT EXISTS `appointments` (
`appointmentID` int(9) unsigned NOT NULL AUTO_INCREMENT,
`patientID` int(9) unsigned NOT NULL,
`apptTitle` varchar(50) NOT NULL,
`apptDate` date NOT NULL,
`apptTime` time NOT NULL,
`apptLength` int(4) NOT NULL,
`apptStatus` varchar(25) NOT NULL,
`physician` int(9) unsigned NOT NULL,
`apptType` varchar(30) NOT NULL,
`apptInvoice` varchar(10) NOT NULL,
`apptNotes` varchar(1000) NOT NULL,
`apptLocation` varchar(25) NOT NULL,
`apptReminder` int(4) NOT NULL,
PRIMARY KEY (`appointmentID`),
KEY `patientID` (`patientID`),
KEY `physician` (`physician`),
KEY `apptStatus` (`apptStatus`),
KEY `apptLocation` (`apptLocation`),
KEY `apptType` (`apptType`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
附注:您会注意到我的“类型”、“地点”和“状态”字段是varchar类型,并且它们链接到查找表。因此,我存储的是实际值,而不是每个项目的ID(因此每个查找表只是字段值作为PK,没有ID列)。我这样做是为了减少将来的连接,但我知道这有点非规范化。如果这是错误的方法,请随时让我知道,除了知道我以后不必进行这些连接之外,我还没有找到令人信服的证据。在更新时有“on update”逻辑,因此如果进行更改,则会更新约会表中的值。
目标是显示所有可用的预约时间段(这些是15分钟的时间段,因此12:00am-12:14:59am、12:15:00am-12:29:59am等等)。默认情况下,我只会显示未来X天(可能是14天)的所有预约时间段,没有限制。但是,如果患者想看特定的医生,我希望限制一下,或者如果医生只需要咨询,我可以将位置限制在咨询室,而不占用检查室。或者,我们知道需要安排X个月的随访,因此我可以开始显示经过该时间的日期。或者,患者只能在周末或下午5点后预约。
从我所了解的情况来看,我需要某种预约“时间段”表,但是我不确定如何构建该表,以便可以将其与现有预约进行比较并找到我的时间段。
我对MySQL有一些了解,也总是喜欢接受挑战,但我似乎无法理解如何做到这一点。我寻找类似的问题,但没有一个真正涵盖我正在寻找的定制量,并且我无法弄清楚如何调整该代码使其适用于我。希望有人能帮助我理解我需要如何实现这个想法!
提前感谢您的帮助!