php, mysql datetime. выборка каждые 2 часа

R
На сайте с 18.12.2009
Offline
92
1732

Делаю рассылку sms.

Например, рассылка назначена на

2014-07-29 22:20:00

php файл по крону запускается каждую минуту.

Если время date('Y-m-d H:i:00', time()) = 2014-07-29 22:20:00 - производится рассылка по параметрам.

Пытаюсь реализовать цикличные рассылки, т.е. например каждый час.

У каждого часа есть общие параметр - минуты.

Т.е. такой запрос в mysql - MINUTE(`time`) = '" . date('i', time()) . "' // 20 == 20

А как быть, когда пользователь задает рассылку в цикле, каждые n часов? Каждые 2 часа? каждые 5 недель и т.п.?

Спасибо.

M
На сайте с 12.11.2005
Offline
122
#1
rerighter:
Т.е. такой запрос в mysql - MINUTE(`time`) = '" . date('i', time()) . "' // 20 == 20

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

rerighter:
А как быть, когда пользователь задает рассылку в цикле, каждые n часов?

Берете ЧАСЫ, а не минуты. Если делится на n без остатка, значит время пришло. Только опять же не забудьте про минуты и секунды, но лучше ставить "флаг" отправки для защиты от возможных сбоев.

Удачи!

R
На сайте с 18.12.2009
Offline
92
#2

$query = mysql_query("
SELECT
`id`,
`params`
FROM
`mass_mailing`
WHERE
MINUTE(`time`) = '" . date('i', $time) . "'
");

modelist, скрипт по крону выполняется 1 раз каждую минуту. Не каждую секунду. Поэтому проверять секунды нет необходимости.

Вполне достаточно сравнить, равняется ли MINUTE('2014-07-29 22:20:00') числу 20, для выборки каждый час.

Чтобы делать выборку каждую неделю, месяц и т.п. можно уже делат ьвыборку, используя DATE_FORMAT().

Но как выбирать каждые, например, 5 недель от заданной, не могу додуматься.

VHS
На сайте с 28.09.2007
Offline
142
VHS
#3

а не проще хранить заданный интервал + время когда должна произойти рассылка в таймштампе и после выполнения апдейтить таймштамп от текущего + интервал, а по крону просто сравнивать таймштамп?

Ну и для разовых заданий флаг добавить.

по поводу минуты... а при залегании сервера что произойдет? минута - крайне мало...

R
На сайте с 18.12.2009
Offline
92
#4
VHS:
апдейтить таймштамп от текущего + интервал

То, что нужно! Спасибо.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий