带有提醒的MySQL日历

时间:2013-03-31 12:56:11

标签: mysql date

我正在开发一个可以安排活动和提醒的ajax网络日历。

架构

id INT
title VARCHAR
startdate TIMESTAMP
endtime TIME
enddate DATE
kind INT
reminder INT DEFAULT 0

解释

“kind”字段可以是0,1,2,3,4,5,如“一次”,“每日”,“工作日”,“每周”,“每月”,“每年”

“提醒”字段以分钟为单位,表示提醒应开始提醒的startdate前几分钟

我需要选择“正在进行”的事件和提醒(混合两者都没有问题......我会在php中分割出类似“真实事件”/“提醒”)

选择

在这个SELECT中,我只考虑“一次”(0)和“每日”(1)种日程......(更容易让你理解)

SELECT * 
FROM calendar 
WHERE
    enddate >= NOW()
AND
(
    (
        NOW() >= startdate
        AND kind=0
        AND CURDATE() = DATE(startdate)
        AND CURTIME() <= endtime
    )
    OR
    (
        NOW() >= startdate
        AND kind=1
        AND CURTIME() >= TIME(startdate)
        AND CURTIME() <= endtime
    )
    OR
    ( 
        NOW() >= DATE_SUB(startdate, INTERVAL reminder MINUTE)
        AND NOW() < startdate 
    )
)

问题

我选择事件和提醒“一次”类型没有问题,因为提醒行为**reminder**分钟前**startdate**分钟 DATE_SUB(startdate,INTERVAL提醒MINUTE) < / p>

正如您所看到的,SELECT在第一个计划之后错过了kind = 1的提醒,因为重复意味着“startdate end enddate之间的每一天”,并且提醒本身应该重复出现。

我知道我需要获得下一个日程/时间并减去**reminder**,但到目前为止我找不到合适的解决方案......(请记住,我的“完整”SELECT应该有工作日/每周/每月/每年的时间表,比我需要正确的sql部分合并到其他类型的时间表...但对于这个具体的问题,我限制每日提醒,只是为了不难理解我在说什么! :D)

如何解决这个问题?请帮帮我:(

1 个答案:

答案 0 :(得分:0)

start "" /wait "%~d0\SETUP_POSTOP\01 Configure Power Settings\always on.bat"