Автоматическое обновление таблицы MYSQL по дате - PullRequest
0 голосов
/ 28 сентября 2010

У меня есть таблица MYSQL, которая содержит информацию о событиях. Мне нужен механизм, который обновляет статус каждого события в соответствии с его датой («более», если это прошедшая дата). Каков наилучший способ сделать такую ​​вещь? Обновите статус события, когда любой пользователь входит в систему (бесполезная процедура для большинства пользователей), создайте какую-то внутреннюю задачу (например, задание cron?) Или любым другим способом. Прямо сейчас статус события обновляется только тогда, когда создатель входит в систему. Это работает, но другой пользователь будет видеть событие как «запланированное», пока создатель не войдет в систему, даже если дата прошла. Кстати, я использую PHP. Спасибо

Ответы [ 5 ]

1 голос
/ 28 сентября 2010

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

Если, конечно, вам не нужно больше возможных статусов («планирование», «подготовка», «настройка» и т. Д.). Затем вам потребуется либо запланированные даты / время для каждого из этих статусов, либо вам необходимо сохранить переменную состояния. В любом случае вы можете обновить статус (в соответствии с сегодняшней датой и любой другой соответствующей информацией) в тот момент, когда он запрашивается.

0 голосов
/ 31 января 2011

Каждый ответ принимает вашу причину для обновления.Однако позвольте мне усомниться в этом решении, дополнив предложение полковника Шрапнеля из комментариев.

Обновление можно рассматривать как пустую трату ресурсов, поскольку вы можете рассчитать его на ходу с помощью сравнения дат в памяти (то есть порядкана порядок быстрее, чем ввод-вывод в хранилище).

Существует два подхода к этому:

  • запрос / представление могут это сделать (и стоимость действительно должна быть незначительной)
  • фактически делает это на стороне php после получения результатов (рассмотрите это как задачу форматирования / представления)
  • это может быть даже сделано на стороне клиента, что, если возможно, с точки зрения производительности будет лучшим решением (это может привести к проблемам с обслуживанием / безопасностью)

Конечно, могут быть веские причины для игнорирования этих решений, но я думаю, что производительности самой по себе недостаточно (большинство БД связаны с вводом / выводом).

0 голосов
/ 29 сентября 2010

Я бы пошел на работу в полночь, если бы вам не приходилось иметь дело с большим количеством часовых поясов.Повторное вычисление кажется довольно расточительным, а вычисления по требованию могут оказаться довольно запутанными с точки зрения обслуживания, поскольку они оставляют базу данных в частично некорректном состоянии.

0 голосов
/ 28 сентября 2010

Используйте это,

UPDATE events SET status = 'over' WHERE DATE(event_date) > NOW();

Запускать его каждый день, один раз в день, набрав cron .

0 голосов
/ 28 сентября 2010

Обновление при входе пользователя в систему не очень хорошая идея, так как добавляет слишком много нагрузки (если пользователей много).Лучший способ сделать это - запускать cronjob каждую ночь после 12 часов утра или в начале дня.Если вы все еще хотите сохранить свой старый код, оберните его датой.псевдо будет выглядеть так:

$updated_last = last modification time of the file "updated";
if($updated_last is more than 1 day) {
 update db; (your old code)
 touch file "updated";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...