2013-06-26 4 views
2

У меня эти две таблицы в базе данных MySQL, которые зависят друг от друга. В настоящее время DateExpires поле в Table 2 должно быть дата в формате yyyy-mm-dd h:m:s Но я стараюсь, чтобы заставить его быть один год, и в первый день от DateJoined поле или поле Обновление Месяц в Table1, как : 2014-03-01 12:00:00Таблица обновлений на основе месяца из другой таблицы

Я пытался обновить их на основе Обновление Месяц и DateJoined поле, но ничего не дает мне результат им ищет, как я могу это сделать?

enter image description here

ответ

1

Здесь вы идете. Вы собираетесь выполнить обновление, соединяя две таблицы (1 и 2) вместе с производной таблицей имен месяцев для сопоставления с номером месяца. Вы устанавливаете t2.DateExpires на конкатенацию значений из соединения.

Вот демо это работает: http://sqlfiddle.com/#!2/a388d/1

UPDATE `Table1` AS `t1` 
    INNER JOIN `Table2` AS `t2` 
     ON `t2`.`IDMember` = `t1`.`ID` 
    INNER JOIN (
     SELECT '01' AS `number`, 'Jan' AS `name` 
     UNION SELECT '02', 'Feb' 
     UNION SELECT '03', 'Mar' 
     UNION SELECT '04', 'Apr' 
     UNION SELECT '05', 'May' 
     UNION SELECT '06', 'Jun' 
     UNION SELECT '07', 'Jul' 
     UNION SELECT '08', 'Aug' 
     UNION SELECT '09', 'Sep' 
     UNION SELECT '10', 'Oct' 
     UNION SELECT '11', 'Nov' 
     UNION SELECT '12', 'Dec' 
    ) AS `m` ON `m`.`name` = `t1`.`RenewalMonth` 
SET `t2`.`DateExpires` = CONCAT(
        IF(YEAR(`t1`.`DateJoined`), YEAR(`t1`.`DateJoined`), YEAR(NOW())) + 1, 
        '-', `m`.`number`, '-01 00:00:00') 
+0

Это то, что мне нужно! Спасибо, много человек! – Tower

+0

@Tower - приветствия. –

+0

Ну, натолкнувшись на неприятности, он также, похоже, обновляет некоторые записи как '0001-01-01 12: 00: 00' вместо фактической даты. – Tower

1

Использование DATE_ADD добавить в год, и DATE_FORMAT преобразовать в нужный формат:

UPDATE Table2 
SET DateExpires = DATE_FORMAT(DATE_ADD(t1.DateJoined, 'INTERVAL 1 YEAR'), '%Y-%m-%d %h:%i:%s') 
FROM Table1 t1 
WHERE IDMember = t1.ID 

Если вы хотите, чтобы базировать это на RenewalMonth, вы можете сделать это следующим образом:

UPDATE Table2 
SET DateExpires = DATE_FORMAT(DATE_ADD(STR_TO_DATE(
    concat(t1.RenewalMonth, ' ', 
      DAY(t1.DateJoined), ', ', 
      YEAR(t1.DateJoined)), '%M %d,%Y'), 
    'INTERVAL 1 YEAR'), '%Y-%m-%d %h:%i:%s') 
FROM Table1 t1 
WHERE IDMember = t1.ID 
+0

Он не хочет, чтобы просто добавить в год. Он хочет «месяц возобновления» в следующем году. –

+0

@StevenMoseley: Хорошая точка - обновлено. – PinnyM

+0

Вы не можете быть уверены в том, что 'RenewalDate''% M'. –

0

Попробуйте это:

update table2 as t2 
inner join table1 as t1 on t2.IDMember = t1.ID 
set DateExpires = date_format(date_add(t1.DateJoined, 'interval 1 year'), '%Y-%m-%d 12:00:00') 
Смежные вопросы