如果在匹配条件的某个时间间隔后如何更新表格?
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
上更新。
答案 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