MySQL по умолчанию дата () + 14 дней, для столбца? - PullRequest
3 голосов
/ 08 февраля 2012

Мне было интересно, возможно ли сделать следующее через MySQL или это нужно будет сделать с помощью PHP.

Задача - «Дата истечения»

  1. Пользователь вводит название продукта
  2. Пользователь нажимает кнопку отправки формы
  3. Данные отправляются POST и затем отправляются в MySQL
  4. Дата истечения срока = дата сейчас + 14 дней

Я пытаюсь добиться того, чтобы mysql вставил «expiry_date» в столбец таблицы, который будет равен 14 дням после даты создания строки в этой таблице.

например

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

У меня такое ощущение, что в mysql это невозможно сделать без использования хранимой процедуры.

Я счастлив сделать это в PHP, однако я надеялся, что смогу сделать это.это с MySQL оставит меньше возможностей для ошибок в моей системе.

Спасибо

Ответы [ 7 ]

5 голосов
/ 08 февраля 2012

Создайте таблицу и настройте триггер для этой таблицы.

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 дней.

2 голосов
/ 08 февраля 2012

Вы можете использовать это с помощью 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;

Для получения более подробной информации перейдите на здесь .

1 голос
/ 08 февраля 2012

Я считаю, что MySQL не позволит вам использовать выражения в значении по умолчанию.Возможно, вы захотите написать триггер.

MySQL предоставляет тип данных TIMESTAMP, который может быть установлен в CURRENT_TIMESTAMP, когда строка создается или обновляется.Вы можете найти эту функцию в некоторой степени полезной:

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

Если вы уверены, что MySQL заполняет этот столбец, как и ожидалось, вы можете писать запросы следующим образом:

SELECT `Created`, `Created` + INTERVAL 14 DAY AS `expiry_date`
FROM table1
1 голос
/ 08 февраля 2012

Согласно этому источнику нельзя использовать выражения в качестве спецификатора по умолчанию.

Так что не уверен, изменилось ли оно с момента публикации ошибки.

Я не уверен, однако, почему я предположил, что OP хочет определить его как значение по умолчанию.

1 голос
/ 08 февраля 2012

Вы можете попробовать эту функцию

DATE_ADD(now(), INTERVAL 14 DAY);

1 голос
/ 08 февраля 2012
date = DATE_ADD(NOW(), INTERVAL 14 DAY)

или, как сказано, измените структуру таблицы для этого поля (атрибут для этого поля =) на "при обновлении CURRENT_TIMESTAMP"

0 голосов
/ 07 декабря 2015

Самый простой способ решить эту проблему - просто вставить нужное значение - без триггера или более позднего обновления, например.

 INSERT INTO <your_table> (name, expiry_date) VALUES ('foo', DATE_ADD(CURRENT_TIMESTAMP,INTERVAL 7 DAY))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...