我需要在db字段中存儲持續時間的方法。我正在建立一個網站,客戶應該能夠選擇他們希望廣告從特定開始日期顯示多長時間。在大於TIME範圍的MySQL中存儲持續時間的最佳方式是什麼?
我曾想過使用時間,但有一個最大「838:59:59」,這在約34天的作品出來。有可能客戶希望廣告存在的時間比這更長。
那麼這將是對付它的最好方法?只是一個非常大的INT?
我需要在db字段中存儲持續時間的方法。我正在建立一個網站,客戶應該能夠選擇他們希望廣告從特定開始日期顯示多長時間。在大於TIME範圍的MySQL中存儲持續時間的最佳方式是什麼?
我曾想過使用時間,但有一個最大「838:59:59」,這在約34天的作品出來。有可能客戶希望廣告存在的時間比這更長。
那麼這將是對付它的最好方法?只是一個非常大的INT?
如果您打算有開始時間和一個持續時間爲一列,我認爲你可以將其存儲在幾秒鐘。所以,我認爲你會有這樣的事情;
+-----------+--------------------------+------------------+
| advert_id | start_time | duration_seconds |
+-----------+--------------------------+------------------+
| 2342342 |'2012-11-12 10:23:03' | 86400 |
+-----------+--------------------------+------------------+
(對於這個例子的目的,我們將調用此表adverts
)
DURATION_SECONDS - 時間,以秒爲廣告應該是 「活」(INTEGER(11)
小號ELECT TIME_TO_SEC(timediff(now(),start_time))作爲'time_difference_in_seconds_since_advert_started'從adverts
;
如果您只想獲得尚未過期的廣告,您將運行一個像這樣的查詢;
SELECT * FROM `adverts` WHERE TIME_TO_SEC(timediff(now(),start_time))<=`duration_seconds`;
這是一個方式,我會做,如果我去的「持續時間」字段。
這幾乎就是我正在談論的內容,但它更多的是與最好的字段類型存儲它,而不是這樣做的應用程序。 DevArt如上所述,我可以使用BIGINT來解決TIME範圍問題。謝謝你的回答,它的寫得很好。^_^ – cosmicsafari
好的cosmicsafari。不要忘記選擇它作爲正確的答案;) – mwangi
不是最好的解決辦法,但你可以在你的數據庫中添加一列,並檢查時,時間超過24小時,計算其1天,並在該列寫的,和所有的時間列中的休息時間寫。但是,從DB你應該也算天
是那列中選擇,你可以儲存時間INT數據類型(或其他大整數MEDIUMINT,LONGINT)。然後使用你可以很容易地獲得日期和時間的一部分,例如 -
SELECT time DIV 86400 AS days, SEC_TO_TIME(column1 MOD 86400) AS time FROM table
其中86400是24小時內的秒數(60 * 60 * 24 = 86400)。
爲什麼不記錄在兩列開始和結束時間? – eggyal
這是我原來的計劃,但在試圖找出網站的其他方面時證明是相當混亂的,存儲的時間會更清晰,我認爲。 – cosmicsafari
你會在什麼單位存儲你的持續時間?秒?分鐘?天?這可以幫助你決定數據類型 – mwangi