2012-11-12 60 views
6

我需要在db字段中存儲持續時間的方法。我正在建立一個網站,客戶應該能夠選擇他們希望廣告從特定開始日期顯示多長時間。在大於TIME範圍的MySQL中存儲持續時間的最佳方式是什麼?

我曾想過使用時間,但有一個最大「838:59:59」,這在約34天的作品出來。有可能客戶希望廣告存在的時間比這更長。

那麼這將是對付它的最好方法?只是一個非常大的INT?

+0

爲什麼不記錄在兩列開始和結束時間? – eggyal

+0

這是我原來的計劃,但在試圖找出網站的其他方面時證明是相當混亂的,存儲的時間會更清晰,我認爲。 – cosmicsafari

+0

你會在什麼單位存儲你的持續時間?秒?分鐘?天?這可以幫助你決定數據類型 – mwangi

回答

6

如果您打算有開始時間和一個持續時間爲一列,我認爲你可以將其存儲在幾秒鐘。所以,我認爲你會有這樣的事情;

+-----------+--------------------------+------------------+ 
| advert_id | start_time    | duration_seconds | 
+-----------+--------------------------+------------------+ 
| 2342342 |'2012-11-12 10:23:03'  | 86400   | 
+-----------+--------------------------+------------------+ 

(對於這個例子的目的,我們將調用此表adverts

  1. advert_id - 一鍵指向您的廣告
  2. START_TIME - 當時的廣告應該開始(數據類型 - TIMESTAMP)
  3. 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`; 

這是一個方式,我會做,如果我去的「持續時間」字段。

+1

這幾乎就是我正在談論的內容,但它更多的是與最好的字段類型存儲它,而不是這樣做的應用程序。 DevArt如上所述,我可以使用BIGINT來解決TIME範圍問題。謝謝你的回答,它的寫得很好。^_^ – cosmicsafari

+0

好的cosmicsafari。不要忘記選擇它作爲正確的答案;) – mwangi

0

不是最好的解決辦法,但你可以在你的數據庫中添加一列,並檢查時,時間超過24小時,計算其1天,並在該列寫的,和所有的時間列中的休息時間寫。但是,從DB你應該也算天

1

是那列中選擇,你可以儲存時間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)。

相關問題