programing

MySQL 월별/년 단위 반복 이벤트

muds 2023. 10. 18. 23:07
반응형

MySQL 월별/년 단위 반복 이벤트

저는 1/2/3/4/5 또는 6개월/년마다 발생할 수 있는 이벤트를 반복적으로 작업하고 있습니다.여기서 몇 가지 해결책을 찾았지만 대부분 며칠/주 단위입니다.

또한 나는 마감일 15일 전에 이벤트를 받아야 합니다.스크립트는 매일 자정에 실행되며 15일까지인 이벤트(알림)가 있는지 확인하고 알림(표에 삽입)을 보냅니다.

여기 제가 시도한 질문이 있습니다.

SELECT *, ABS(TIMESTAMPDIFF(SECOND, first_date - INTERVAL 15 DAY, CURDATE())) AS diff, 
TIMESTAMPDIFF(SECOND, first_date, first_date + INTERVAL `repeat` * IF(repeat_type = '0', 1, 12) MONTH) AS tdiff FROM reminders
WHERE 
ABS(TIMESTAMPDIFF(SECOND, first_date - INTERVAL 15 DAY, CURDATE())) % 
TIMESTAMPDIFF(SECOND, first_date, first_date + INTERVAL `repeat` * IF(repeat_type = '0', 1, 12) MONTH) = 0
OR ABS(TIMESTAMPDIFF(SECOND, first_date, CURDATE())) = 0;

repeat_type알림이 월 단위로 발생하는지 또는 연간 단위로 발생하는지 결정합니다(0 = 월 단위, 1 = 년 단위).repeat속성은 수량(1-6)입니다.

문제는 다름에 있다고 생각합니다(2차).TIMESTAMPDIFF), 두 날짜의 차이를 계산하여 초수를 반환합니다.그러나 개월 수는 동일하지 않으며(28-31일), 해당 모듈로(%) 때문에 0을 반환하지 않는 경우도 있습니다.어떤 범위(modulo는 0 또는 <= 3일을 반환해야 함)로 이 문제를 해결할 수 있다고 생각했는데 어떤 값이 적절할지 잘 모르겠습니다.

오늘은 2018년 9월 12일(2018-09-12)입니다.2018-09-27일까지인 오늘부터 15일 동안 테이블에 몇 줄을 추가했습니다.쿼리 위를 실행할 때(없음)where조항) 이해합니다.

+----+------+------------+--------+-------------+---------+----------+----------+
| id | type | first_date | repeat | repeat_type | message | diff     | tdiff    |
+----+------+------------+--------+-------------+---------+----------+----------+
| 19 | 0    | 2018-09-27 |      6 | 0           | A       |        0 | 15638400 |
| 20 | 1    | 2018-09-27 |      1 | 1           | AA      |        0 | 31536000 |
| 21 | 2    | 2018-09-27 |      1 | 1           | AAA     |        0 | 31536000 |
| 22 | 3    | 2018-09-27 |      0 | 1           | AAAA    |        0 |        0 |
| 23 | 1    | 2018-03-27 |      2 | 0           | OPA     | 15897600 |  5270400 |
+----+------+------------+--------+-------------+---------+----------+----------+

마지막 행(2018-03-27부터 2개월마다 반복)을 보면 다음과 같은 결과가 나와야 합니다.where하지만 15897600% 5270400=86400 (하루입니다.

언급URL : https://stackoverflow.com/questions/52293494/mysql-repeating-events-monthly-yearly

반응형