2012-02-19 61 views
0

我有一個表tbl_a,以「ID」作爲主鍵,與columnns「GROUP_ID」,「日期」,「長度」,「有效」,「CID」用條件更新不同的列?

我想進行更新查詢將更新爲:

7UPDATE all GROUP_IDCID=9,並 if(DATE+LENGTH<TODAY) //我想說如果與另外的長度個月DATE列比今天的日期小(NOW()),

THEN 
SET VALID to be FALSE 
for that row. 

使用YYYY-mm-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

聲明「更新7的所有GROUP_ID爲CID = 9」尚不清楚。當條件「DATE + LENGTH 2012-02-19 04:39:04

+0

「長度」代表什麼 - 小時,分鐘,天,年? – 2012-02-19 04:40:04

回答

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:我有什麼,或多或少 – 2012-02-19 04:46:00

+0

#ypercube,這是否意味着「ELSE有效」也可以是ELSE 1或其他? – Ted 2012-02-19 05:01:04

+0

是的,當然它可以你想要的。我認爲你不想在這種情況下改變列。 – 2012-02-19 09:11:58