Получить список записей на основе временных интервалов (PHP / MySQL) - PullRequest
1 голос
/ 29 ноября 2010

В моей таблице базы данных есть поле DATETIME с именем 'start_datetime'.

Временная часть всегда сохраняется с интервалами в 5 минут без секунд, например: 15:25:00 или 12:10:00 или 17: 30: 00

Теперь мне нужно настроить задачу CRON, которая будет отправлять электронное письмо ровно за 2 дня до «start_datetime».

Есть несколько проблемздесь:

1) Прежде всего мне нужно НАЙТИ все записи с 'start_datetime', который ровно за 2 дня до СЕЙЧАС (т.е. время выполнения запроса)

2)игнорировать любые записи, которые больше, чем 2 дня или меньше.Учитывая, что время основано на 5-минутных интервалах, я могу только предположить, что задача CRON будет выполняться каждые 5 минут?Это может быть проблемой, потому что мой хостинг-провайдер разрешает запуск CRON только один раз в час максимум.

Итак, как лучше всего подойти к этому?

Ответы [ 3 ]

1 голос
/ 29 ноября 2010

Неужели так важно, чтобы он был точным с точностью до 5-минутного интервала или было бы приемлемо отправить это электронное письмо на 55 минут раньше?

Если это так, вы можете запустить запрос, который выбираетвсе записи, которые достигнут этой 2-дневной отметки в течение следующего часа.

Запрос будет выглядеть примерно так: (быстро и грязно, не проверено)

SELECT * FROM table 
    WHERE CURRENT_TIMESTAMP >= DATESUB(startDate, INTERVAL 49 HOUR)
    AND CURRENT_TIMESTAMP < DATESUB(startDate, INTERVAL 48 HOUR);
0 голосов
/ 29 ноября 2010

Разрешит ли ваш провайдер неограниченное время выполнения скрипта?Если это так, вы можете создать скрипт, который запрашивает базу данных каждые пять минут через функцию сна.

Функция:

http://php.net/manual/en/function.sleep.php

Псевдокод:

function query_db() {
  //query code
}

for($i = 1; $i <= 60; $i++) {
  query_db();
  sleep(300);
}
0 голосов
/ 29 ноября 2010

Поскольку вы можете запускать cron только один раз в час, тогда вы можете отправлять электронные письма только для выбранных значений. ГДЕ start_datetime - МЕЖДУ 2 днями, 2 днями и 1 часом, или вы можете настроить веб-службу, Вам звонят каждые 5 минут с вашего компьютера с кроной, но это не рекомендуется.

...