2012-02-19 2 views
0

У меня есть таблица tbl_a, с «ID» в качестве первичного ключа, с columnns «GROUP_ID», «ДАТА», «длина», «ДЕЙСТВИТЕЛЬНО», «ИДС»Обновление разных столбцов с условием?

Я хотел бы сделать обновление запрос, который будет обновлять как:

UPDATE all GROUP_ID из 7 быть CID=9 и if(DATE+LENGTH<TODAY) // Я хочу сказать, если столбец DATE с добавлением LENGTH месяцев меньше, чем сегодняшняя дата (NOW()),

THEN 
SET VALID to be FALSE 
for that row. 

Использование формата ГГГГ-мм-dd

так, что если таблица была

ID| GROUP_ID | DATE  | LENGTH| VALID| CID 
--------------------------------------------------- 
1|  7 | 2011-12-01 |  1 | 1 | 2 
2|  7 | 2012-01-01 |  1 | 1 | 7 
3|  7 | 2012-02-01 |  1 | 1 | 2 
4|  7 | 2012-03-01 |  2 | 1 | 3 

после обновления:

ID| GROUP_ID | DATE  | LENGTH| VALID| CID 
--------------------------------------------------- 
1|  7 | 2011-12-01 |  1 | 0 | 9 // res:2012-12-01,update VALID 
2|  7 | 2012-01-01 |  1 | 0 | 9 // res:2012-02-01,update VALID 
3|  7 | 2012-02-01 |  1 | 1 | 9 // res:2012-03-01,no update for VALID 
4|  7 | 2012-03-01 |  2 | 1 | 9 // res:2012-05-01,no update for VALID 

Не могли бы вы сказать мне синтаксис для этого запроса?

+0

Утверждение «ОБНОВИТЬ ВСЕ GROUP_ID 7 для CID = 9» неясно. Вам нужно будет уточнить, что вы хотите, когда условие 'DATE + LENGTH

+0

Что означает 'length' - часы, минуты, дни, годы? –

ответ

2
UPDATE TableX 
SET cid = 9 
    , valid = CASE WHEN `date` + INTERVAL length MONTH < CURDATE() 
       THEN 0 
       ELSE valid 
      END 
WHERE group_id = 7 
+0

+1: Что у меня было, более или менее –

+0

#ypercube, означает ли это, что «ELSE valid» также может быть ELSE 1 или что-то еще? – Ted

+0

Да, конечно, это могло быть то, что вы хотите. Я предположил, что вы не хотите менять колонку в этом случае. –

Смежные вопросы