我正在制作一个PHP警报通知,如果达到温度设定点,它将发送一封电子邮件。
我有CRONJOB,它每1分钟运行一次,运行一个PHP脚本来验证温度,如果温度达到某个温度,它将向我发送电子邮件通知。
问题是,由于CRONJOB,温度超过设定点时,它将每分钟向我发送一封电子邮件通知。我希望它仅向我发送一次电子邮件。一分钟不发送。
我正在使用MYSQL存储警报信息。如果我需要一些如何在mysql中设置时间戳并让脚本验证时间并在x时间内发送它的话??
谢谢
答案 0 :(得分:0)
您可以在应用程序代码中或直接在数据库中进行计算。 这是一些伪代码。
应用代码
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();
}
如果您选择使用应用程序代码版本,强烈建议您使用Carbon(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();
}
您可以通过直接在查询中进行比较来进一步压缩数据库版本,但我将由您自己决定。