2012-05-22 67 views
0
UPDATE ost_timeblock 
SET 
    timeblock_due_date=DATE(timeblock_next_update), 
    timeblock_next_update=DATE_ADD(NOW(),INTERVAL timeblock_recurrence_time **timeblock_recurrence_unit**) 
WHERE timeblock_recurrence=1 
    AND timeblock_complete=0 
    AND timeblock_next_update=FROM_UNIXTIME(1337662800) 

當我使用手動日或月作爲timeblock_recurrence_unit它工作正常。查詢中的變量

timeblock_recurrence_unit = enum(day,month,year)我想在上面的粗體字位置

timeblock_recurrence_unit值是否有任何方式的情況下做到這一點。

If timeblock_recurrence_unit = 'day' then 
timeblock_next_update=DATE_ADD(NOW(),INTERVAL timeblock_recurrence_time day) 

If timeblock_recurrence_unit = 'month' then 
timeblock_next_update=DATE_ADD(NOW(),INTERVAL timeblock_recurrence_time month) 
+1

請格式化你的查詢,它適合在幾行 – Sebas

+2

我指這位議員[本](http://stackoverflow.com/questions/6749892/sql-use-column-value-作爲關鍵字,在查詢字符串)。不幸的是,這是不可能的。抱歉。 – DaveRandom

回答

0
UPDATE ost_timeblock SET 
    timeblock_due_date = DATE(timeblock_next_update), 
    timeblock_next_update = DATE_ADD(NOW(), INTERVAL timeblock_recurrence_time  
**timeblock_recurrence_unit**) 
WHERE 
    timeblock_recurrence=1 
AND timeblock_complete=0 
AND timeblock_next_update = FROM_UNIXTIME(1337662800) 

根據MySQL的DOC: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add

的DATE_ADD特徵接受的日期,一個單元的inverval,以執行日期算術。 你必須提供一個給定的單位,沒有單位的ENUM像你想這樣做。

你將不得不修改你的功能需求,也許三思DATE_ADD方法是否正在執行想要的動作。

RGDS。

0

你可以使用用戶定義的變量如下: 見http://dev.mysql.com/doc/refman/5.0/en/user-variables.html

SET @timeblock_recurrence_unit = 'DAY'; 
UPDATE ost_timeblock SET 
timeblock_due_date=DATE(timeblock_next_update), 
timeblock_next_update=DATE_ADD(
     NOW(), 
     INTERVAL timeblock_recurrence_time @timeblock_recurrence_unit 
) WHERE 
    timeblock_recurrence=1 AND 
    timeblock_complete=0 AND 
    timeblock_next_update= FROM_UNIXTIME(1337662800); 
+0

如果單位是月份,該怎麼辦?不DAY – user1410812

+0

@ user1410812,見上面通過DaveRandom評論。這根本行不通,你不能使用單位的變量,它必須是一個常數。 – bfavaretto

+0

我用它的案例。 – user1410812