#mysql #mamp #dateadd
#mysql #mamp #dateadd
Вопрос:
Привет, моя проблема связана с добавлением дней к дате из двух разных таблиц в MySQL в среде Mamp.
Тип членства для транзакции членства равен 1 ко многим, ссылка type_id
Дата также указана в yyyy/mm/dd
формате, поскольку это единственный формат, который Mamp допускает из моего исследования.
Я хочу новый столбец даты окончания, который ссылается на длительность столбца из таблицы типов членства. Я хочу добавить Duration_day
onto start_date
, чтобы получить конечную дату, которая совпадает с type_id. (Таким образом, они соединяются, чтобы указать правильную конечную дату)
Я хочу, чтобы это автоматически вычислялось при сохранении даты начала и идентификатора типа
Любая помощь была бы оценена, спасибо
Комментарии:
1. Можете ли вы указать, что вы пробовали до сих пор, и что не работает
2. Отредактируйте свой первоначальный вопрос. Пожалуйста, используйте текст типа
SHOW CREATE TABLE tablename
, чтобы показать структуру ваших данных.
Ответ №1:
Вам понадобится триггер при ВСТАВКЕ / ОБНОВЛЕНИИ — вычисляемый столбец (для MySQL версии 5.7.6 ) в вашем случае не будет работать (он может ссылаться только на столбцы в одной таблице). Два триггера могут выглядеть следующим образом
CREATE DEFINER = 'root'@'%' TRIGGER `m_duration_ins_tr1` BEFORE INSERT ON `membership`
FOR EACH ROW
BEGIN
DECLARE duration INTEGER;
SELECT m_duration INTO duration FROM membership_type WHERE id = NEW.type_id;
SET NEW.end_date := DATE_ADD(NEW.start_date, INTERVAL duration DAY);
END;
CREATE DEFINER = 'root'@'%' TRIGGER `m_duration_ins_tr1` BEFORE UPDATE ON `membership`
FOR EACH ROW
BEGIN
DECLARE duration INTEGER;
SELECT m_duration INTO duration FROM membership_type WHERE id = NEW.type_id;
SET NEW.end_date := DATE_ADD(NEW.start_date, INTERVAL duration DAY);
END;