gpt4 book ai didi

php - 如何在 mySQL 数据库中正确存储事件的重复和复杂的提醒?

转载 作者:行者123 更新时间:2023-11-29 19:12:42 24 4
gpt4 key购买 nike

我想将事件的重复存储在 mySQL 数据库中(此外,我正在使用 Symfony 3 和 Doctrine ORM)。

例如:每三天/每周一次/双月/半年/每年一次

存储此类数据以便能够轻松地对其执行查询的最佳方式是什么?

此外,我想根据这些重复情况创建复杂的提醒。

例如:2 月至 9 月:每周一次,10 月至 1 月:双月一次

我如何管理提醒的日期计算?我应该存储开始日期并每次计算下一个日期,还是应该在提醒标记为已完成时仅存储下一个日期?

(我的用例:设置植物浇水提醒)。

非常感谢您分享您的想法!

问候!

最佳答案

您可以在 MySQL 本身中设置事件,或者按照 pogeybait 的建议,您可以编写一个 cron 作业和一个命令。

如果您需要服务器在数据库之外执行某些操作,则可能需要 cron 作业。如果它全部包含在数据库中(例如只需将“plants_need_watering = false”列更新为“plants_need_watering = true”,而无需发送电子邮件或启动其他程序),那么我会说MySQL事件更合适。

这是一个非常好的事件教程(尽管我在尝试时不得不使用分隔符):https://www.sitepoint.com/how-to-create-mysql-events/

这是我写的一个简单事件。您可以看到它如何根据日期更新数据库列。我将自己的“事件”(不是 MySQL 事件,而是我的应用程序中的实体)的状态设置为“投票已结束”。如果“voting_end”日期已过今天,并且该事件每 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);

此外,这里还有有关编写控制台命令的 Symfony 文档。这实际上很容易。 http://symfony.com/doc/current/console.html

以及用于启动控制台命令的 cron 作业:https://www.cyberciti.biz/faq/how-do-i-add-jobs-to-cron-under-linux-or-unix-oses/

关于php - 如何在 mySQL 数据库中正确存储事件的重复和复杂的提醒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42960921/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com