2012-02-08 59 views
3

我想知道是否可以通过MySQL来完成以下任务,还是必须使用PHP来完成。MySQL默认日期()+ 14天,对于一列?

任务 - “到期日”

  1. 用户输入商品名
  2. 用户点击提交表单按钮
  3. 数据是POST'ed,然后发送到MySQL
  4. 过期日期=日期现在+14天

我想实现的是一种让mysql插入表列中的“expiry_date”将等于该表在该表中创建该行之后的14天。

例如

product_name - foo 
entry_date - 2012-02-01 
expiry_date - 2012-02-15 

我有一种感觉,除非使用存储过程,否则可能无法在mysql中执行操作。

我很高兴在PHP中做到这一点,但我希望如果我可以用mysql来做到这一点,它会在我的系统中留下更少的错误空间。

感谢

+1

您可以使用触发器。 – Polynomial 2012-02-08 09:41:58

+0

当你插入不会更简单的只是添加14天到你说的入口日期,我想这将是NOW(),然后将它与插入查询一起传递? – 2012-02-08 09:49:28

+0

@JaspreetChahal,不,因为我需要一个开始日期和结束日期来将事情已过期,作为错误预防的失败保护 – kaleeway 2012-02-08 10:16:05

回答

5

创建一个表,并设置为该表添加触发器。

CREATE TABLE product(
    product_id INT PRIMARY KEY, 
    product VARCHAR(40), 
    entryDate DATETIME, 
    expDate DATETIME 
); 

CREATE TRIGGER test_trigger BEFORE INSERT ON `product` 
FOR EACH ROW SET 
    NEW.entryDate = IFNULL(NEW.entryDate, NOW()), 
    NEW.expDate = TIMESTAMPADD(DAY, 14, NEW.entryDate); 

在每次插入表中,触发设置entryDate到当前的时间和expDate到14天的时间。

1
date = DATE_ADD(NOW(), INTERVAL 14 DAY) 

或者说,改变你的表结构该字段(属性该字段=)以“上更新CURRENT_TIMESTAMP”

+0

感谢您的帮助,解决了我的问题! :) – kaleeway 2012-02-08 09:47:32

1

您可以使用此通过使用DateTime方法MySQL的

DATE_ADD(date_starts,INTERVAL 14 DAY) 

例如:

UPDATE events SET date_starts = DATE_ADD(date_starts,INTERVAL 14 DAY) WHERE event_id = 3; 

欲了解更多详情请致here

+0

感谢你,从来不知道date_add()函数! :) – kaleeway 2012-02-08 09:47:16

1

你可以试试这个这个功能

DATE_ADD(now(), INTERVAL 14 DAY);

1

根据这一source你不能使用表达式作为默认符。

所以不知道自从发布错误以来它是否发生了变化。

但我不确定为什么我假设OP想要将其定义为默认值。

1

我相信MySQL不会允许你在默认值中使用表达式。你可能想写一个触发器。

MySQL确实提供了一个TIMESTAMP数据类型,可以在创建或更新行时将其设置为CURRENT_TIMESTAMP。您可能会发现此功能有些有用:如果您确信MySQL正在填补这一列如预期

CREATE TABLE table1 (
    `Column1` VARCHAR(50) NULL, 
    `Created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP 
) 

,您可以编写查询这样的:

SELECT `Created`, `Created` + INTERVAL 14 DAY AS `expiry_date` 
FROM table1 
+0

我想远离TIMESTAMP,因为它不如DATETIME,但是谢谢 – kaleeway 2012-02-08 10:41:49

-1

解决这个问题的最简单方法就是插入你想要的值 - 无需触发或稍后更新,例如。

INSERT INTO <your_table> (name, expiry_date) VALUES ('foo', DATE_ADD(CURRENT_TIMESTAMP,INTERVAL 7 DAY)) 
+0

默认在'CREATE TABLE',而不是'INSERT' – Green 2017-08-02 06:49:47