一个比较复杂的问题table:
id               t                                      t2                                   a      
1        2009-09-23 18:00:00                        16:00:35                                16
2        2009-09-23 16:32:45                        12:23:43                                18
3        2009-09-23 23:59:58                        09:12:22                                20
执行一个update, 例如where id=1判断t2的时间加上a(16秒)后的时间是不是大于现在时间now()
如果小于等于现在时间now(),则把日期t加上a(16秒),同时把t2时间变成now()
如果大于现在时间now(),则日期t不变,t2也不变一条sql能实现么?

解决方案 »

  1.   

    一句SQL可以实现update table1 
    set t=DATE_ADD(t,INTERVAL a SECOND),
    t2=now()
    where DATE_ADD(t2,INTERVAL a SECOND)<=NOW();
      

  2.   

    update tt set t2=if(addtime(t2,'00:00:16')>time(now()),t2,time(now()))
    ,
    t=if(addtime(t2,'00:00:16')>time(now()),t,DATE_ADD(t,INTERVAL 16 SECOND))
    where id=1
      

  3.   

    更改一下,为了方便初始化把t2变成和t一样的类型DATETIME
      

  4.   

    一楼就是按t,t2 都是datetime 写的。你可以自己试一下。
      

  5.   

    orupdate tt set t2=time(now())

    t=DATE_ADD(t,INTERVAL 16 SECOND)) 
    where id=1 and addtime(t2,'00:00:16')<=time(now())
      

  6.   

    or update tt set t2=time(now()) 

    t=DATE_ADD(t,INTERVAL 16 SECOND)
    where id=1 and addtime(t2,'00:00:16') <=time(now())
      

  7.   

    2楼的方法比较适合我的意思,我想问的其实是if()条件判断语句的用法,没说明白.
    因为 where 条件判断已经用来选取数据了.如果再加个时间判断,取得就不一样了
    至于选取到的数据,在用if来进一步处理.多谢了