我有一個名爲「teams」的表,其中列爲「inactive」,另一個表爲「time」列中的「events」。如果任何團隊的「事件」中的最新日期發生在X時間前,我如何更新「非活動」列(爲true)?mysql automation
我知道這可能是美國能源部與PHP腳本,但我正在尋找一個SQL解決方案
我有一個名爲「teams」的表,其中列爲「inactive」,另一個表爲「time」列中的「events」。如果任何團隊的「事件」中的最新日期發生在X時間前,我如何更新「非活動」列(爲true)?mysql automation
我知道這可能是美國能源部與PHP腳本,但我正在尋找一個SQL解決方案
在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
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。