我正在編寫一個用於跟蹤約會的PHP/MySQL應用程序,並且我堅持根據是否選擇任意數量的條件來查找下一個可用預約。具有多個條件的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 am-12:14:59am,12:15:00 am-12:29:59am等)。默認情況下,我只是在沒有限制的情況下顯示接下來X天(可能是14天)的所有預約時段。但是,如果病人想看特定的醫生,我想限制一下,或者如果醫生只需要諮詢,我就可以將診所的位置限制在一個諮詢室而不需要考試室。或者,我們知道後續行程需要安排X個月,所以我可以在這段時間過後的幾天開始展示。或者,病人只能在週末或下午5點後預約。
從我讀過的內容中,我需要某種預約「插槽」表格,但我不確定我如何構建該表格,以便將其與現有約會進行比較並找到我的插槽。
我知道一個關於MySQL的好方面,我總是面臨一個挑戰,但我似乎無法圍繞我如何做到這一點。我查找過類似的問題,但沒有一個真正涉及到我正在尋找的定製數量,我無法弄清楚如何調整該代碼以使其適用於我。希望有人能幫助我理解我需要採用這個想法的地方!
非常感謝您的幫助!
編寫一個存儲過程,它可以實時生成一個臨時槽表,並根據您的邊界條件將現有約會與該表匹配並過濾。顯示後,放下臨時表。 –