如何在X时间后仅发送一次电子邮件

时间:2019-06-03 15:31:08

标签: php mysql cron

我正在制作一个PHP警报通知,如果达到温度设定点,它将发送一封电子邮件。

我有CRONJOB,它每1分钟运行一次,运行一个PHP脚本来验证温度,如果温度达到某个温度,它将向我发送电子邮件通知。

问题是,由于CRONJOB,温度超过设定点时,它将每分钟向我发送一封电子邮件通知。我希望它仅向我发送一次电子邮件。一分钟不发送。

我正在使用MYSQL存储警报信息。如果我需要一些如何在mysql中设置时间戳并让脚本验证时间并在x时间内发送它的话??

谢谢

1 个答案:

答案 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();
}

您可以通过直接在查询中进行比较来进一步压缩数据库版本,但我将由您自己决定。