2010-01-15 8 views
0

J'ai une table appelée "teams" avec la colonne "inactive" et une autre table "events" avec la colonne "time". Comment est-ce que je peux mettre à jour la colonne "inactive" (à vrai), si la dernière date dans "les événements" pour n'importe quelle équipe s'est produite il ya X fois?mysql automation

Je sais que cela peut être DOE avec un script php, mais je suis à la recherche d'une solution sql

Répondre

1

En MySQL 5.1, vous avez EVENT ... En gros, cela est comme une tâche cron, mais à l'intérieur du base de données:

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

vous pouvez en créer un et le laisser fonctionner, eh bien, aussi souvent que vous devez faire la mise à jour. quelque chose comme:

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 ; 

Vous devrez peut-t configurer le serveur pour activer les événements: http://dev.mysql.com/doc/refman/5.1/en/events-configuration.html

SET GLOBAL event_scheduler = ON; 

Malheureusement, vous avez besoin du privilège SUPER pour l'activer: 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; 

oui, vous pouvez mettre cela dans un événement ou exécuter avec mysql d'un script cron.