2012-05-11 30 views
0

「我需要創建一個字段,將顯示一個日期與現在之間的天數。如何觸發的總天數的MySQL

TABLE: reg_add 

+------------+---------+ 
| Name  | Type | 
+------------+---------+ 
| hm_date | date | 
+------------+---------+ 
| total_days | date | 
+------------+---------+ 

我的客戶將鍵入例如以下日期在「hm_date」:5月1日,2012年

我需要「TOTAL_DAYS」至2012年5月1日之間的總天數顯示在當前日期

我想要實現這個服務器端,這就是生活。

我需要創建一個TRIGGER總是有我開始用這個「TOTAL_DAYS」更新

,我有麻煩觸發並獲得其正確的:

SELECT DATEDIFF(curdate(),hm_date) as total_days FROM reg_add 

任何幫助將是讚賞。

埃裏克

+2

工作爲什麼'型total_days'' date'? – RedFilter

+0

另一名成員推薦給我。客戶將始終按以下格式鍵入他/她的日期:「2008年6月23日」 – Erik

+0

我認爲'hm_date'是包含客戶端輸入的字段。 – RedFilter

回答

0

埃裏克,我使用T-SQL,而不是熟悉的MySQL,但是在TSQL的DATEDIFF函數需要3個參數。該語法時纔是

DATEDIFF(date part, date1, date2).

我會嘗試DATEDIFF(d,GETDATE(),hm_date) AS total_days FROM reg_add

+0

他的SQL非常適合在MySQL中獲取日子。正如他所說,他需要創建一個「觸發器」,以便總是更新total_days。 –

+0

另外,RedFilter在你的原帖上的問題是一個重要的問題。 DATEDIFF的輸出將成爲這兩者之間的天數的INT類型值。不需要嘗試創建一個可變的DATETIME類型作爲佔位符。 – gmaness

+0

「hm_date」(客戶端輸入和字段)需要是什麼類型? – Erik

1

我接過來一看到MySQL的觸發器文件,並從它的外觀,你只能爲事件類型創建觸發器插入,更新和刪除。所以你的觸發器不會實際更新你的total_days字段(它應該是int)。 [這聽起來像你希望它在一個時間基礎上更新你的領域(也就是每x小時更新)]。

下面是文檔:http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html

我建議寫在PHP(多次或)每天定時任務運行一次,將更新該字段爲您服務。

在你的cron你應該只需要運行一個SQL語句:(這應該通過整個表並更新TOTAL_DAYS場的每一行)

UPDATE reg_add SET total_days = DATEDIFF(curdate(),hm_date) 
+0

因此,如果客戶端執行搜索查詢,我可以將此php腳本添加到搜索查詢中。是? – Erik

+0

不。如果這是你想要去的路線,我會建議在你的網絡服務器上做一個Cron Job。然而,從你最後的評論的聲音,爲什麼不在你的SQL中執行datediff?你如何做搜索和使用總天數? –

2

你可以計算出它的飛行很容易使用TIMESTAMPDIFF功能 -

SELECT TIMESTAMPDIFF(DAY, hm_date, NOW()) FROM reg_add; 
0

INSTEAD OF觸發器,你可以使用一個觀點:

CREATE VIEW reg_add_with_total_days_VIEW 
    AS 
SELECT hm_date 
    , DATEDIFF(CURDATE(), hm_date) AS total_days 
FROM reg_add ; 

然後你可以使用視圖,每次你需要的總天數 - 這將在運行時被計算:

SELECT hm_date, total_days 
FROM reg_add_with_total_days_VIEW 

你可以看到它在SQL-Fiddle