如何触发mySQL中的总天数

时间:2012-05-11 13:48:41

标签: php mysql date input triggers

“我需要创建一个字段,显示日期和现在之间的天数。

TABLE:  reg_add

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

我的客户将输入以下日期,例如“hm_date”:2012年5月1日。

我需要“total_days”来显示当前日期2012年5月1日之间的总天数。

我想在服务器端实现这一点,这对我来说有点新鲜。

我需要创建 TRIGGER 以便始终更新“total_days”

我从这开始,我在制作触发器并将其设置正确时遇到了问题:

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

任何帮助都将不胜感激。

埃里克

4 个答案:

答案 0 :(得分:2)

使用TIMESTAMPDIFF函数 -

,您可以非常轻松地计算它
SELECT TIMESTAMPDIFF(DAY, hm_date, NOW()) FROM reg_add;

答案 1 :(得分:1)

我查看了MySQL Trigger Docs,从外观上看,您只能为事件类型Insert,Update和Delete创建触发器。因此,您的触发器实际上不会根据需要更新您的total_days字段(应该是int)。 [听起来你希望它按时间更新你的领域(也就是每x小时更新一次)]。

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

我建议在php中编写一个cron作业,每天运行一次(或多次),为你更新字段。

在您的cron中,您只需要运行一个sql语句:(这应该遍历整个表并更新每行的total_days字段)

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

答案 2 :(得分:0)

Erik,我使用的是tsql,而不是熟悉mySQL,但在tsql中,DATEDIFF函数需要3个参数。 sytax是

  

DATEDIFF(date part, date1, date2).

我会尝试DATEDIFF(d,GETDATE(),hm_date) AS total_days FROM reg_add

答案 3 :(得分:0)

您可以使用View:

代替触发器
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

中看到它正常工作