Всем добра! За помощь готов купить кофэ, чай или какао! Нужно напоминать пользователю каждый день допустим о "Выпей кофЭ". Напоминать нужно 21 день (может и 30 и 50 дней) Напомнить 1 раз в день проблем нет, создал БД, крон и вперед. НО! Если нужно напоминать каждые 3 часа на протяжении 21-го дня и НЕ в ночное время, то тут уже загвоздка. Как это хранить в БД? (MySQL, PHP) Буду благодарен, тем кто откликнется
+ создал крон в нужном интервале с заданным периодом - и вперед в чем принципиальная разница с 1 днем? либо писать в БД расписание (дата/время) крон запускать например каждый час, в 6:00, 7:00 итд В скрипте выбирать - есть ли задача уведомления на заданный период в интервале например 10 минут, если есть - уведомлять, и ставить признак что уведомили, и больше не нужно
задай в параметры крона дергать скрипт каждую минуту, пол часа или час, так же установи время запуска с 8 до 20, все это возможно в cron. хранение в БД нужно только если пользователей более одного, иначе все можно просто хранить в скрипте и по условию выдавать напоминалку.
Допустим. Потом после 8-ми как посыпятся ночные уведомления Да, пользователей много. --- Добавлено --- Нужно отслеживать, высылать уведомление и хранить в БД не зависимо 1 день это или каждые 3 часа или каждые 5 часов. Что бы потом взять по юзеру статистику за все дни.
не знаю как это со статистикой связано. но тогда - организовать очередь сообщений, кроном проверять не нужно ли чего отослать раз в 5 минут к примеру. все а не должны? Четче формулируйте задачу, будете получать четкие ответы
Изящно )))) Каждое нужное уведомление записываем в БД (какому юзеру, когда было уведомление, ну смысл его, и прочий шурм-бурум) Крон настраиваем, чтоб он срабатывал с 8 до 20, каждые 3 часа - по крону запускаем скрипт скрипт смотрит в БД все сообщении - не старше текущего момента со статусом непрочитан, отправляем их все кому нужно, отмечая прочитанным в БД.... все счастливы, все смеются , я пью кофе зерновой за ваш счет ))))
Разбей время суток на кванты. Каждое уведомление сделай подзаданием основного задания и наполняй такими уведомлениями спец. таблицу на основе параметров задания ОТ, ДО/СКОЛЬКО, ПЕРИОДИЧНОСТЬ. Осн. запрос будет примерно таким: Код (Text): SELECT * FROM `events` LEFT JOIN `jobs` USING(`job`) WHERE NOW()<`expire` AND `time` BETWEEN NOW() AND NOW()+{$delta} $delta – размер кванта. Крон настраиваешь так, чтобы он вызывался перед границей кванта (можно практически в течение всего пред. кванта, если кванты небольшие). --- Добавлено --- P.S. Первое условие в общем-то лишнее. Оно нужно, если во втором условии используется время дня (чтобы события не зависели от дня; так их можно создавать значительно меньше), а не просто время. --- Добавлено --- P.P.S. Предполагается, что события могут располагаться только на границах квантов.
Да, это все круто, понимаю и т.д. Но нужно это как то потом взять для статистики. Вот тут я писал https://php.ru/forum/threads/algoritm-xranenija-mat-ego.80973/#post-612243 Что бы видно было по каждому юзеру на всем промежутке времени (21 день) его действия.