Задавайте вопросы, мы ответим
Вы не зашли.
добрый день,
в предыдущей моей теме разбирался вопрос о переносе на удаленный сервер с помощью импорта через phpmyadmin таблицы с двумя полями, имеющими свойства TIMESTAMP и значениями по умолчанию CURRENT_TIMESTAMP. Оптимальным было найдено решение для таблицы `products`:
`date_added` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'когда добавлен товар',
`timeLeft` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT 'для обратного отсчета времени для countdown_time',
но в этом случае в поле `timeLeft` год будет 1970 или 1900.
для того, чтобы записывать в него текущую дату и время необходимо создать триггер, например такой:
DELIMITER |
CREATE TRIGGER `update_time` before update ON `products`
BEGIN
NEW.timeLeft = NEW.date_added;
END
DELIMITER ;
На вкладке "Триггеры" таблицы `products` я добавил триггер следующим образом:
1. открыл таблицу `products`
2. открыл вкладку Триггеры
3. Добавить триггер -> открылась форма, заполнил поля
название - update_time
таблица - products
время - BEFORE
событие - UPDATE
определение :
BEGIN
NEW.timeLeft = NEW.date_added;
END
определитель - оставил пустым
4. нажал кнопку OK
но при его добавлении на вкладке "Триггеры" таблицы `products` возникло сообщение об ошибке:
При обработке вашего запроса были обнаружены ошибки:
Данный запрос не был выполнен: "CREATE TRIGGER `update_time` BEFORE UPDATE ON `products` FOR EACH ROW BEGIN NEW.timeLeft = NEW.date_added; END"
Ответ MySQL: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.timeLeft = NEW.date_added; END' at line 2
в чем проблема и как исправить ошибку?
и еще вопрос : могу ли я редактировать таблицу `products` с таким триггером, если например, у клиента открыт магазин или у меня открыта адмипанель? или редактирование таблицы будет все время выдавать сообщения об ошибках?
спасибо за помощь
Отредактированно skolozhabskiy (07.08.2013 15:31:50)
Неактивен
проблема решена так:
BEGIN
SET NEW.timeLeft = NEW.date_added;
END
но возник вопрос - нужен ли вообще триггер для поля, значение которого устанавливается программно. для примера, нужно установить, что акция* "при покупке товара получаете акционный подарок" завершится через 30 дней. в поле `timeLeft` дата и время устанавливаются на 30 дней вперед и затем программно на странице отображается обратный отсчет времени пока текущая дата не станет равной `timeLeft`.
может при такой задаче следует прописать поля в таблице `products` так :
`date_added` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'когда добавлен товар',
`timeLeft` TIMESTAMP NOT NULL COMMENT 'для обратного отсчета времени для countdown_time', - без значения по умолчанию
* акция выборочная для ряда продуктов, например с id равными 2010, 2011,2045,2078-3001,3056 и так далее
или есть более оптимальные решения
спасибо за помощь
Неактивен
С триггером нужно иметь в виду, что он будет срабатывать при любом апдейте и данное поле невозможно будет установить в какое-то иное значение. Если поле обрабатывается в программе, то триггер не нужен.
Неактивен