我正在编写一个用于跟踪约会的 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 列)。我这样做是为了减少将来的连接,但我知道这有点非规范化。如果这是错误的方法,请随时告诉我,我只是没有找到压倒性的证据一种或另一种方式,除了知道如果我有点反规范化以后我不必做这些连接。存在“更新”逻辑,因此如果进行更改,它将更新约会表中的值。
这里的目标是显示所有可用的预约时段(这些是 15 分钟的时段,例如上午 12:00-12:14:59、上午 12:15:00-12:29:59 等)。默认情况下,我只会显示接下来 X 天(可能是 14 天)的所有预约空档,没有任何限制。但是,如果患者想看特定的医生,我想限制在此范围内,或者如果医生只需要咨询,我可以将位置限制在咨询室而不占用检查室。或者,我们知道需要安排 X 个月的后续行动,所以我可以在该时间过去后的几天内开始展示。或者,患者只能在周末或下午 5 点之后进行预约。
根据我的阅读,我需要某种约会“空档”表,但我不确定如何构建该表,以便将其与现有约会进行比较并找到我的空档。
我对 MySQL 有一定的了解,而且我总是在迎接挑战,但我似乎无法理解我将如何做到这一点。我一直在寻找类似的问题,但似乎没有一个真正涵盖我正在寻找的定制量,而且我无法弄清楚如何调整该代码以使其适合我。希望有人可以帮助我了解我需要用这个想法去哪里!
预先感谢您的帮助!