powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите! Сервис напоминания...
7 сообщений из 7, страница 1 из 1
Помогите! Сервис напоминания...
    #38706757
Ariasus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем! Подкиньте пожалуйста идею как правильно реализовать задачу. И так, надо сделать что бы при наступлении некоторого события появлялось уведомление. Например поздравление людей с праздниками, днями рождения, напоминание что им необходимо купить расходники или совершить другие действия. Если с ежегодными событиями нет никаких сложностей, то например, что делать с событиями которые должны происходить каждые 2 месяца или например 8 месяцев или каждые 50 дней абсолютно не понятно. У меня есть дата первого события и периодичность. Т.Е. на выходе должна быть таблица событий которые случаться сегодня. Пытаюсь сейчас все это сделать при помощи MySQL, но моих знаний не хватает. Если кто-то решал подобную задачу ткните куда копать. Заранее спасибо за ответ.
...
Рейтинг: 0 / 0
Помогите! Сервис напоминания...
    #38706760
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При столь общих формулировках непонятно причем тут MySQL.
Во-первых, определитесь с типами событий, который нужно обрабатывать. Пришедший по сети UDP-пакет или изменение логического сигнала на COM-порту - это тоже события.

Если речь о календарных событиях, т.е. о наступлении определенного даты-времени, то изучите формат файла crontab. Даже если сам cron вам не подойдет (это тоже еще нужно обосновать), то по крайней мере, получите хорошие варианты для способов хранения расписания календарных событий.

P.S. "Появилось уведомление" - это тоже не к MySQL, т.к. он ни имеет никаких визуальных средств, через которые можно было бы вывести уведомления.
...
Рейтинг: 0 / 0
Помогите! Сервис напоминания...
    #38706761
kixiro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А в чем сложность?


У вас допустим есть таблица с 2 полями:

1. Начало события
2. Периодичность.
3. id уведомления

В своем приложении делаете отдельный поток который с периодичностью N ( например 1 раз в минуту, все зависит от задачи) обходит таблицу, и если mod((now() - поле1), поле2) < N , то выводим уведомление, связанное через поле3.

как то так.
...
Рейтинг: 0 / 0
Помогите! Сервис напоминания...
    #38706763
Ariasus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft, наверное коряво объяснил...
Как пример событие которое происходит каждые пять месяцев... Например человеку необходимо каждые пять месяцев покупать какой-нибудь расходник.
Купил он этот расходник первый раз 01.01.2014, второй 01.06.2014, третий 01.11.2014, четвертый 01.04.2015, 01.09.2015, 01.02.2015 и.т.д.
Если сегодня 01.02.2015 и в базе храниться начальная дата 01.01.2014 и интервал 5 месяцев как вычислить что это событие должно произойти сегодня? Естественно средствами Mysql. В итоге этих событий будут тысячи, а то и десятки тысяч. Так что на выходе мне надо получить таблицу этих событий, визуализацией и обработкой этих данных уже займется движок... Если провести аналогию с cron то вопрос звучит примерно так: как получить список заданий которые необходимо выполнить сейчас?
...
Рейтинг: 0 / 0
Помогите! Сервис напоминания...
    #38706765
Ariasus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kixiro, mod((now() - поле1), поле2) < N что такое N в этой конструкции? поясните пожалуйста...
...
Рейтинг: 0 / 0
Помогите! Сервис напоминания...
    #38706774
Ariasus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kixiroА в чем сложность?


У вас допустим есть таблица с 2 полями:

1. Начало события
2. Периодичность.
3. id уведомления

В своем приложении делаете отдельный поток который с периодичностью N ( например 1 раз в минуту, все зависит от задачи) обходит таблицу, и если mod((now() - поле1), поле2) < N , то выводим уведомление, связанное через поле3.

как то так.

можно в принципе подробнее про mod((now() - поле1), поле2) < N что считает, что получается на выходе, в каком формате тут фигурирует поле2? я пытался делать что-то подобное но я записывал начальную дать в формате timestamp в поле int (количество секунд) преобразовывал текущую в секунды и период в секунды, и пытался выяснить остаток от целочисленного деления, но из-за високосных годов ровным счетом ничего не получилось так как в году помоему 365,24 дня в среднем...
...
Рейтинг: 0 / 0
Помогите! Сервис напоминания...
    #38706922
kixiro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
N - это время периодичности проверки правила(в той же размерности, что и поля, если unix_timestamp - то это секунды).
Если проверять например каждую минуту, то N = 60 и результат должен быть в рамках 0 до 60, если больше, то вышли за период.

Пример:

mysql> create table events ( start_dat datetime, interval_dat int(10), id int(10));
Query OK, 0 rows affected (0.08 sec)

mysql> insert into events values ('2014-07-01 00:02:00', 5*24*60*60, 1);
Query OK, 1 row affected (0.05 sec)

т.е. начало 2014-07-01 в 2 часа, интервал 5 дней:

Код: sql
1.
2.
3.
4.
5.
6.
7.
mysql> select mod(unix_timestamp(now())-unix_timestamp(start_dat),interval_dat) from events;
+-------------------------------------------------------------------+
| mod(unix_timestamp(now())-unix_timestamp(start_dat),interval_dat) |
+-------------------------------------------------------------------+
|                                                            182731 |
+-------------------------------------------------------------------+
1 row in set (0.00 sec)



в момент например 2014-07-06 00:( 01:59 | 02:59 | 03:59 ) будет подходить к периоду попадания:

Код: sql
1.
2.
3.
4.
5.
6.
7.
mysql> select mod(unix_timestamp('2014-07-06 00:01:59')-unix_timestamp(start_dat),interval_dat) from events;
+-----------------------------------------------------------------------------------+
| mod(unix_timestamp('2014-07-06 00:01:59')-unix_timestamp(start_dat),interval_dat) |
+-----------------------------------------------------------------------------------+
|                                                                            431999 |
+-----------------------------------------------------------------------------------+
1 row in set (0.00 sec)



Код: sql
1.
2.
3.
4.
5.
6.
7.
mysql> select mod(unix_timestamp('2014-07-06 00:02:59')-unix_timestamp(start_dat),interval_dat) from events;
+-----------------------------------------------------------------------------------+
| mod(unix_timestamp('2014-07-06 00:02:59')-unix_timestamp(start_dat),interval_dat) |
+-----------------------------------------------------------------------------------+
|                                                                                59 |
+-----------------------------------------------------------------------------------+
1 row in set (0.00 sec)



Код: sql
1.
2.
3.
4.
5.
6.
7.
mysql> select mod(unix_timestamp('2014-07-06 00:03:59')-unix_timestamp(start_dat),interval_dat) from events;
+-----------------------------------------------------------------------------------+
| mod(unix_timestamp('2014-07-06 00:03:59')-unix_timestamp(start_dat),interval_dat) |
+-----------------------------------------------------------------------------------+
|                                                                               119 |
+-----------------------------------------------------------------------------------+
1 row in set (0.01 sec)
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите! Сервис напоминания...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]