eblinkoff
@eblinkoff
придурок

Как повторять в этот же день через месяц, через год, через неделю?

Здравствуйте! Вопрос скорее на здравый смысл.
Есть простая таблица, в которой записаны некие события. (Простой планировщик). И запрос, соответственно делается примерно такой: "SELECT * FROM table WHERE `date` <= "'.date('Y-m-d H:i:s').'" или что-то в этом роде, всё работает. А как сделать, чтобы какую-либо запись выдавало в этот же день через месяц, через год, через неделю? Самое простое, что приходит на ум - наплодить записей на лет десять вперёд для данного дня, но этот подход кажется таким некрасивым. Может я что-то не догоняю и есть какой-то простой способ реализовать такое? Помогите мне, пожалуйста.
  • Вопрос задан
  • 201 просмотр
Решения вопроса 1
rozhnev
@rozhnev
Fullstack programmer, DBA, медленно, дорого
Могу посоветовать следующую структуру:
create table `calendar` (
  `event` varchar(64),
  `year` smallint unsigned,
  `month` tinyint unsigned,
  `day` tinyint unsigned,
  `hour` tinyint unsigned,
  `minute` tinyint unsigned
);

insert into calendar values
('December 31 every year at 23:55', null, 12, 31, 23, 55),
('every minute in december 2020', 2020, 12, null, null, null),
('every hour at first of month', null, null, 1, null, 0)
;

select `event`
from `calendar`
where 
	(`year` is null or `year` = year(now())) and 
	(`month` is null or `month` = month(now())) and
	(`day` is null or `day` = day(now())) and
	(`hour` is null or `hour` = hour(now())) and
	(`minute` is null or `minute` = day(now()))
;


Запустить SQL запрос
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@beerchaser
Добавить поля периодичность и количество повторений?
Ответ написан
hrabry
@hrabry
Добавь столбец next_access
И записывай в него например
date('Y-m-d H:i:s', strtotime('+1 month'))
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы