我正在做一个PHP警报通知,如果温度设定点已经达到,它将发送一封电子邮件。
我有CRONJOB,每1分钟运行一次,运行一个PHP脚本来验证温度,如果温度达到某个点,它会发送电子邮件通知给我。
问题是,由于CRONJOB,温度超过设定点时,它每分钟都会给我发一封电子邮件通知。我希望它只给我发一封电子邮件。一分钟都不发。
我使用MYSQL来存储报警信息。如果我需要一些,如何在mysql中设置时间戳,并让脚本验证时间,并在x时间内发送它。
谢谢,
发布于 2019-06-03 15:56:02
您可以在应用程序代码中或直接在DB中进行计算。这是一些伪代码。
应用程序代码
CONST NOTIFICATION_DURATION = '30 minutes';
$mostRecentNotification = query('SELECT MAX(created_at) FROM notifications');
// Notice we're doing the calculation in our application code.
$nextAvailableNotification = $mostRecentNotification + NOTIFICATION_DURATION;
if (current_time >= $nextAvailableNotification) {
send_notification();
}如果您选择使用应用程序代码版本,我强烈建议使用像date (https://carbon.nesbot.com/)这样的库来帮助您完成日期/时间算法。即使像这样的简单计算,它也确实是一种拯救生命的方法。
数据库版本
CONST NOTIFICATION_DURATION = '30 minutes';
// Notice we're doing our calculation in our database
$nextAvailableNotification = query('SELECT MAX(created_at) + INTERVAL ' . NOTIFICATION_DURATION . ' FROM notifications');
if (current_time >= $nextAvailableNotification) {
send_notification();
}您可以在查询中直接进行比较,从而进一步压缩数据库版本,但这将由您决定。
https://stackoverflow.com/questions/56430429
复制相似问题