За последние 24 часа нас посетили 22853 программиста и 1234 робота. Сейчас ищут 772 программиста ...

Алгоритм хранения мать его...

Тема в разделе "PHP для новичков", создана пользователем AlexProg, 23 окт 2019.

  1. AlexProg

    AlexProg Активный пользователь

    С нами с:
    13 май 2014
    Сообщения:
    320
    Симпатии:
    7
    Всем добра!

    За помощь готов купить кофэ, чай или какао!

    Нужно напоминать пользователю каждый день допустим о "Выпей кофЭ".
    Напоминать нужно 21 день (может и 30 и 50 дней)
    Напомнить 1 раз в день проблем нет, создал БД, крон и вперед.
    НО! Если нужно напоминать каждые 3 часа на протяжении 21-го дня и НЕ в ночное время, то тут уже загвоздка.
    Как это хранить в БД? (MySQL, PHP)

    Буду благодарен, тем кто откликнется :)
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.824
    Симпатии:
    738
    Адрес:
    Татарстан
    + создал крон в нужном интервале с заданным периодом - и вперед
    в чем принципиальная разница с 1 днем?

    либо писать в БД расписание (дата/время) крон запускать например каждый час, в 6:00, 7:00 итд
    В скрипте выбирать - есть ли задача уведомления на заданный период в интервале например 10 минут, если есть - уведомлять, и ставить признак что уведомили, и больше не нужно
     
    AlexProg нравится это.
  3. rewuxiin

    rewuxiin Активный пользователь

    С нами с:
    17 апр 2012
    Сообщения:
    611
    Симпатии:
    87
    задай в параметры крона дергать скрипт каждую минуту, пол часа или час, так же установи время запуска с 8 до 20, все это возможно в cron.

    хранение в БД нужно только если пользователей более одного, иначе все можно просто хранить в скрипте и по условию выдавать напоминалку.
     
    AlexProg нравится это.
  4. AlexProg

    AlexProg Активный пользователь

    С нами с:
    13 май 2014
    Сообщения:
    320
    Симпатии:
    7
    Допустим. Потом после 8-ми как посыпятся ночные уведомления :)

    Да, пользователей много.
    --- Добавлено ---
    Нужно отслеживать, высылать уведомление и хранить в БД не зависимо 1 день это или каждые 3 часа или каждые 5 часов.
    Что бы потом взять по юзеру статистику за все дни.
     
  5. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.824
    Симпатии:
    738
    Адрес:
    Татарстан
    не знаю как это со статистикой связано. но тогда - организовать очередь сообщений, кроном проверять не нужно ли чего отослать раз в 5 минут к примеру. все

    а не должны? Четче формулируйте задачу, будете получать четкие ответы
     
    AlexProg нравится это.
  6. AlexProg

    AlexProg Активный пользователь

    С нами с:
    13 май 2014
    Сообщения:
    320
    Симпатии:
    7
    Пардон.
    Ночью не шлем, только с 8:00 утра до 20:00 вечера.

    Как это сделать?
     
  7. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.824
    Симпатии:
    738
    Адрес:
    Татарстан
    Изящно ))))
    Каждое нужное уведомление записываем в БД (какому юзеру, когда было уведомление, ну смысл его, и прочий шурм-бурум)
    Крон настраиваем, чтоб он срабатывал с 8 до 20, каждые 3 часа - по крону запускаем скрипт
    скрипт смотрит в БД все сообщении - не старше текущего момента со статусом непрочитан, отправляем их все кому нужно, отмечая прочитанным в БД.... все счастливы, все смеются , я пью кофе зерновой за ваш счет ))))
     
    AlexProg нравится это.
  8. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.794
    Симпатии:
    650
    Разбей время суток на кванты. Каждое уведомление сделай подзаданием основного задания и наполняй такими уведомлениями спец. таблицу на основе параметров задания ОТ, ДО/СКОЛЬКО, ПЕРИОДИЧНОСТЬ. Осн. запрос будет примерно таким:
    Код (Text):
    1. SELECT * FROM `events` LEFT JOIN `jobs` USING(`job`)
    2.   WHERE NOW()<`expire` AND `time` BETWEEN NOW() AND NOW()+{$delta}
    $delta – размер кванта. Крон настраиваешь так, чтобы он вызывался перед границей кванта (можно практически в течение всего пред. кванта, если кванты небольшие).
    --- Добавлено ---
    P.S. Первое условие в общем-то лишнее. Оно нужно, если во втором условии используется время дня (чтобы события не зависели от дня; так их можно создавать значительно меньше), а не просто время.
    --- Добавлено ---
    P.P.S. Предполагается, что события могут располагаться только на границах квантов.
     
    #8 miketomlin, 23 окт 2019
    Последнее редактирование: 23 окт 2019
  9. AlexProg

    AlexProg Активный пользователь

    С нами с:
    13 май 2014
    Сообщения:
    320
    Симпатии:
    7
    Да, это все круто, понимаю и т.д.
    Но нужно это как то потом взять для статистики. Вот тут я писал https://php.ru/forum/threads/algoritm-xranenija-mat-ego.80973/#post-612243
    Что бы видно было по каждому юзеру на всем промежутке времени (21 день) его действия.
     
  10. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.824
    Симпатии:
    738
    Адрес:
    Татарстан
    Ну и что мешает выборку сделать по пользователю, выбрав за нужный период все его уведомления?