2015-05-06 41 views
0

我有如下表:更改MySQL的值已经过去

user_id  post_streak streak_date   streak  first_name club_id 
-------- ----------- ------------   --------- ----------- -------- 
18941684 1    2015-05-05 15:36:18 3   user  1000 

我想改变的连胜0,如果一直就不再那么12天。

当前查询:

select 
    first_name, streak, user_id from myTable 
where 
    club_id = 1000 
and 
    post_streak = 1 
and 
    streak_date between date_sub(now(),INTERVAL 12 DAY) and now() 
order by streak desc; 

不显示结果旧的然后12天。我想显示所有的结果,但如果它已经超过12天,则将“连胜”更改为0。

什么是最好的方式去做这件事?

+0

DATEADD之间尝试(天,-12,现在()),现在()对不起没关系这可能会得到你同样的结果 –

回答

0
UPDATE table 
SET (streak) 
VALUES (0) 
WHERE streak_date < DATEADD(DAY, -12, NOW()); 
SELECT first_name, streak, user_id from myTable 
WHERE 
    club_id = 1000 
AND 
    post_streak = 1 
ORDER BY streak DESC; 

首先查询将设置有超过12天前streak_date用于记录所有连胜值设置为0 第二次查询将得到所有的记录有1000 club_id和1

一个post_streak列表
0

把条件放在了select,而不是where

select first_name, 
     (case when streak_date between date_sub(now(), INTERVAL 12 DAY) and now() 
      then streak 
      else 0 
     end) as streak, 
     user_id from myTable 
where club_id = 1000 
order by streak desc; 

我是否需要where子句中的post_streak条件不能确定。

0

http://sqlfiddle.com/#!9/d8bbd/6

select 
    user_id, 
    first_name, 
    streak_date, 
    IF(streak_date between date_sub(now(),INTERVAL 12 DAY) and now(),streak,0) 
from myTable 
where 
    club_id = 1000 
and 
    post_streak = 1 
order by streak desc;