2017-05-15 46 views
0

所以我的工作日程安排系統對我的工作基本上我想知道是否有一種方法MySQL在哪兒可以這樣做:的MySQL函數在一個小區內的多個條目

 |Monday |tuesday|wendsday|total 
|Dan |5am-7am |7am-6pm|6am-11am| 
     11am-2pm|  |2pm-7pm | 
     5pm-12am| 

在那裏我可以如果需要的名稱,而不是重複幾次像在第1天輸入多個輪班的每個人在相同的細胞:

Dan|5-4| 
    Dan|6-8| 

並且如果存在一個函數來計算總時間在一個小區與多個移

+0

這不是存儲數據的非常關係的方式。你應該規範設計 – GurV

回答

1

有一種方法(將數據表示爲字符串),但您不希望這樣做 - 您將丟失所有計算,搜索等。 您不應該嘗試在數據庫中完全如數據表示數據它看起來在紙上。 我會做一個表是這樣的:DateTime類型

ShiftID|Person|StartTime|EndTime 

製作開始時間&結束時間列,您將不僅存儲HH:一個轉變的開始毫米,但也一天。當您有一天開始並在下一天結束時,這很有幫助,比如從星期一開始的2017-05-15 23:00和結束於星期二的2017-05-16 02:00。

您只能使用MySQL DATE()函數從此字段中提取日期,並僅選擇那些在當天開始或結束的條目。 爲了計算轉變的時間,你可以使用MySQL的函數TIMESTAMPDIFF() 你甚至可以使用DAYOFWEEK()來獲得,如果它是星期一,星期二,等等

關於複製人的名字 - 我會再拍表,將用戶與他們的數據匹配到Person Person中的用戶ID,但是對於初學者,以及如果您的數據不是很大,並且速度不是問題並且如果打字錯誤(如Den而不是Dan)不成問題。 ..你可以直接在這張表中使用這個名字。

將數據存儲在這樣的表格後,您可以用HTML(或打印)表示它。

0

您可以創建第三個表有以下欄目:

person_id int, 
start_time datetime, 
end_time datetime 

person_id將外鍵Person表和start_timeend_time將datetime列。然後,您可以在此表中存儲多個人員的記錄,並使用MySQL的date functionsGROUP BY生成類似於所討論的報告。