Php 如何正确存储事件';mySQL数据库中的重复出现和复杂提醒?
我想在mySQL数据库中存储事件的重复发生(另外,我正在使用Symfony 3和ORM) 例如: 每3天/每周一次/双月/半年/每年一次 为了能够方便地对此类数据执行查询,存储此类数据的最佳方式是什么 此外,我想根据这些重复事件创建复杂的提醒 例如: 二月至九月:每周一次,十月至一月:双月 我如何管理提醒的日期计算?我应该存储开始日期并每次计算下一个日期,还是应该在提醒标记为已完成时仅存储下一个日期 (我的用例:为浇水植物设置提醒) 非常感谢您分享您的想法Php 如何正确存储事件';mySQL数据库中的重复出现和复杂提醒?,php,mysql,database,symfony,time,Php,Mysql,Database,Symfony,Time,我想在mySQL数据库中存储事件的重复发生(另外,我正在使用Symfony 3和ORM) 例如: 每3天/每周一次/双月/半年/每年一次 为了能够方便地对此类数据执行查询,存储此类数据的最佳方式是什么 此外,我想根据这些重复事件创建复杂的提醒 例如: 二月至九月:每周一次,十月至一月:双月 我如何管理提醒的日期计算?我应该存储开始日期并每次计算下一个日期,还是应该在提醒标记为已完成时仅存储下一个日期 (我的用例:为浇水植物设置提醒) 非常感谢您分享您的想法 问候 如果您在Linux机器上,您可以
问候 如果您在Linux机器上,您可以使用cron作业来检查,无论检查频率如何。我会创建一个控制台应用程序来执行此操作,以便更容易调用cron作业。创建控制台应用程序比您想象的要简单。对于数据库,我将存储每个事件的一般信息(名称、标题、描述)和一个间隔字段,该字段将说明触发通知的频率。最初存储添加事件时的当前日期和时间,然后在间隔时间超过触发时间时存储通知,并存储通知的日期和时间。这是我能想到的最简单的方法。有关控制台命令,请参见此处的更多信息。您可以在MySQL本身中设置事件,或者按照pogeybait的建议,您可以编写一个cron作业和一个命令 如果需要服务器在数据库之外执行某些操作,则可能需要cron作业。如果它都包含在数据库中(比如只需将“plants\u need\u watering=false”列更新为“plants\u need\u watering=true”,而无需发送电子邮件或启动其他程序),那么我认为MySQL事件更合适 这里有一个关于事件的非常好的教程(尽管我在尝试时不得不使用分隔符): 这是我写的一个简单的事件。您可以看到它如何根据日期更新db列。我将我自己的“事件”(不是MySQL事件,而是我应用程序中的一个实体)的状态设置为“投票已关闭”。如果“投票结束”日期已过,并且每12小时运行一次,我知道我不会意外错过一次。这只是作为常规SQL输入一次,您可以在本地开发人员机器上练习并检查结果,方法是将计划设置为每小时左右,检查它是否工作,然后切换回实际所需的时间范围以运行事件:每周、每月等
SET GLOBAL event_scheduler = ON;
CREATE EVENT switch_event_status
ON SCHEDULE EVERY 12 HOUR
DO
UPDATE event_status
INNER JOIN
event ON event_status.id = event.event_status_id
SET
event_status.value = \'Voting is closed.\'
where
event.voting_end <= cast(now() as date);
SET GLOBAL event_scheduler=ON;
创建事件开关\u事件\u状态
按计划每12小时一次
做
更新事件状态
内连接
事件上的事件\u status.id=事件.event\u status\u id
设置
事件\u status.value=\'投票已结束。\'
哪里
事件。投票结束