cronjob / триггер, который может обновлять базу данных каждый день - PullRequest
0 голосов
/ 12 августа 2009

Я использую MYSQL в качестве базы данных и PHP в качестве языка программирования. Я хотел запустить задание cron, которое будет выполняться до тех пор, пока текущая системная дата не будет соответствовать столбцу deadline (date) в моей таблице базы данных под названием «PROJECT». Если даты совпадают, необходимо выполнить запрос на обновление, который изменит статус (поле таблицы проекта) с «открыто» на «закрыто».

Я не совсем уверен, что задания cron - лучший способ, или я мог бы использовать триггеры или что-то еще. Также я использую Apache в качестве веб-сервера, и моя ОС - Windows Vista.

Ответы [ 4 ]

1 голос
/ 12 августа 2009

Из-за отсутствия cron на некоторых хостингах я однажды написал набор классов для «отложенных задач». Я понял, что некоторые задачи не нужно запускать точно в указанное вами время, но их можно отложить до того момента, когда какой-либо клиент запросит сервер.

Надеюсь, это поможет - ZIP .

1 голос
/ 12 августа 2009

Если ваша ОС Vista, то эквивалентом cronjob является запланированное задание. MySQL не имеет средства для запуска триггера при изменении даты, поэтому PHP-скрипт, выполняющий то же самое, является хорошим выбором.

Все, что вам нужно сделать, это открыть планировщик ( Панель управления> Система и обслуживание> Администрирование> Расписание задачи ) и создать новую задачу.

Например, если PHP установлен в C:\PHP\, а ваш скрипт в C:\htdocs\tasks\close_projects.php, вам необходимо создать задачу со следующим действием:

Действие: Запуск программы
Программа / скрипт: C:\PHP\php.exe
Добавить аргументы: close_projects.php
Начало в: C:\htdocs\tasks\

Настройте остальные параметры в соответствии с вашими потребностями. (Например, вы хотите использовать ежедневное задание).


Другой вариант - выполнить свою задачу по первому запросу дня. В этом случае вам нужно добавить код PHP, который запускается при каждой загрузке страницы. Просто сохраните дату последнего запроса, и, если текущий запрос был сделан вчера, запустите оператор SQL.

0 голосов
/ 12 августа 2009

Какую версию mySql вы используете?

mySql поддерживает временные триггеры начиная с 5.1.6

http://dev.mysql.com/tech-resources/articles/event-feature.html

ки

0 голосов
/ 12 августа 2009
UPDATE project SET status='closed' WHERE deadline<=CURDATE();

Настройка запланированной задачи для выполнения этого запроса должна быть тривиальной.

...