2010-01-15 26 views
0

我有一個名爲「teams」的表,其中列爲「inactive」,另一個表爲「time」列中的「events」。如果任何團隊的「事件」中的最新日期發生在X時間前,我如何更新「非活動」列(爲true)?mysql automation

我知道這可能是美國能源部與PHP腳本,但我正在尋找一個SQL解決方案

回答

1

在MySQL 5.1中,你有要事......基本上這就像一個cron作業,但裏面的數據庫:

http://dev.mysql.com/doc/refman/5.1/en/events.html

您可以設置一個,並讓它運行,很好,經常你需要做的更新。 類似:

delimiter // 

CREATE EVENT update_inactive_teams 
ON SCHEDULE EVERY 1 DAY 
ON COMPLETION PRESERVE 
ENABLE 
DO 
UPDATE teams 
SET inactive = 1 
WHERE now() - 14 DAY > (
     SELECT MAX(event_date) 
     FROM events e 
     WHERE e.team_id = teams.id 
     ) 
// 
delimiter ; 

您可能需要牛逼配置服務器,以使事件: http://dev.mysql.com/doc/refman/5.1/en/events-configuration.html

SET GLOBAL event_scheduler = ON; 

不幸的是,你需要SUPER權限來啓用它: http://dev.mysql.com/doc/refman/5.1/en/events-privileges.html

0
update teams t 
    set t.inactive = 1 
where :x > (select max(e.time) 
       from events e 
       where e.team_id = t.id) - current_time; 

是的,你可以把它放到事件中,或者用cron腳本運行mysql。