2012-05-22 44 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