如何在一定时间间隔后更新表

时间:2012-09-14 09:32:24

标签: mysql

如果在匹配条件的某个时间间隔后如何更新表格?

tb_contest
id   contest_id   name   is_expire
1    101          new    0
2    102          old    0

tb_answer
contest_id   answer_id   date
101          1           2012-02-02
101          2           2012-09-14
102          5           2012-06-01

我需要在满足某些条件后更新tb_contest,并根据收到的最后一个回答i {e is_expire=1在2天后生成2012-03-14,以便tb_contest应在2012-09-16上更新。

3 个答案:

答案 0 :(得分:5)

你可以使用MySQL的event scheduler

CREATE EVENT expire_contests
  ON SCHEDULE EVERY DAY
     STARTS CURRENT_DATE
  DO UPDATE tb_contest JOIN (
       SELECT   contest_id, MAX(date) AS latest
       FROM     tb_answer
       GROUP BY contest_id
     ) t USING (contest_id)
     SET    tb_contest.is_expire = 1
     WHERE  tb_contest.is_expire <> 1
        AND t.latest <= CURRENT_DATE - INTERVAL 2 DAY

答案 1 :(得分:0)

试试这个,

UPDATE tb_contest a INNER JOIN
        (
            SELECT contest_ID, MAX(`date`) maxDate
            FROM tb_answer
            GROUP BY contest_ID
        ) b ON a.contest_ID = b.contest_ID
SET a.is_expire = 1
WHERE   DATEDIFF(CURDATE(), b.maxDate) >= 2 AND 
        a.is_expire = 0

所以在这里,两个表由contest_ID加入,并在tb_answer上有最新的回答日期。通过使用DATEDIFF(),我们可以了解今天的日期与比赛日期之间的差异。

答案 2 :(得分:0)

您可以在JOIN子句中UPDATE比赛和答案表上的内部查询,并使用MySQL的DATEDIFF来计算自答案以来的天数,好的,回答:

UPDATE
    tb_contest c
    JOIN (SELECT contest_id, MAX(date) AS date FROM tb_answer GROUP BY contest_id) AS a
        ON a.contest_id = c.id
SET
    c.is_expire = 1

WHERE 
    DATEDIFF(NOW(), a.date) >= 2