2015-12-11 81 views
-1

我們已經開發中,我們顯示了在特定城市打開藥店藥房網站。的最佳方式和MySQL

我處理這一個名爲「時間戳」字段中至極它存儲了一段約3個月開放時間,每15分鐘的所有時間戳。 例如,如果天天開放時間爲每天8:00至19:00,則會有一段時間的時間戳,間隔爲15分鐘。

雖然在前端我們開藥店的名單,我可以通過查詢與例如數據庫顯示打開的: "WHERE timestamps LIKE('%1449820800%')"其中時間戳四捨五入到最接近的一刻鐘當前時間。

問題是:考慮到每週的時間範圍不同,有沒有更好的方法來處理這種情況?另外,因爲我們有25000個用戶,並且如果我們有大量時間戳,網站速度很慢。

預先感謝您!

回答

3

你可以只具有開通的每一天,每一個數據庫中存儲:

----------------------------------------- 
| StoreId | Day | HourOpen | HourClose | 
========================================= 
|  1 | 1 | 8:30  | 21:15  | 
----------------------------------------- 
|  1 | 2 | 9:00  | 17:00  | 
----------------------------------------- 
|  2 | 1 | 10:00 | 12:30  | 
----------------------------------------- 
|  2 | 1 | 14:00 | 19:00  | 
========================================= 

在該表中,當日表示一週的一天(1日,2日爲例)和那麼你只需要爲每個商店的開放時間參數化一次。

然後,您可以查詢該表,看是否有店爲您開放,在非常時刻的一週中的一天。

如果藥店有exceptionnal關閉或開通小時一天,我建議像這樣的

---------------------------------------------------------- 
| StoreId | Date  | isOpen | HourOpen | HourClose | 
========================================================== 
|  1 | 2015-12-20 | true | 10:00 | 16:00  | 
---------------------------------------------------------- 
|  2 | 2015-12-20 | false | null  | null  | 
========================================================== 

這樣一個ovveride表,你可以先檢查是否有藥房在這個表中的任何記錄當天(不依賴於時間),如果是這樣,你檢查是否有開放。如果覆蓋表中沒有任何條目,則檢查第一個表。

您也可以用ahve開閉時間,一天表,並創建商店,幾小時或幾天之間關係的關聯表一個小時的模型表。

+0

謝謝!順便說一句,「日」欄不能是一週中的某一天,但它必須是一年中的一天(因爲開放時間可能每週都有所不同)。 另一個問題:時間範圍也可能是同一天的三個時間範圍(例如:從00:00到6:00,從8:00到12:30,從15:00到20:00)。 如何過濾已開放的藥店? 非常感謝你! –

+0

我不認爲每天寫入記錄是一種很好的做法。你可以做的是有另一個表,覆蓋標準的一個與exceptionnal小時 – jiboulex

+0

我把一個藥店,其接近我的表中12:30和14:00只是在那裏之間,你只需要檢查的爲例,如果有一個在這個星期的這一天在這個藥店的表中輸入,並且startTime比現在更低,endTime比現在更高 – jiboulex