如何在cron启动作业时选择新记录
我想选择并仅使用在Cron作业运行和下一次运行之间插入的新记录。从这个意义上说,我不重复我之前编写的任何数据或记录。如何在cron启动作业时选择新记录
从下面的select语句中,请有人指示我,谢谢。
// select statement should pick fresh records only after the first cron
$sql = "SELECT name,amount, trans_id, msisdn, time_paid FROM customer";
$result1 = mysqli_query($conn, $sql);
$resultarr = mysqli_fetch_assoc($result1); // fetch data
$name = $resultarr['name'];
$amount = $resultarr['amount'];
$transaction_id = $resultarr['trans_id'];
$date = $resultarr['time_paid'];
这很重要,因为数据将用于发送短信,而且我不想向某人发送短信两次。
请问,有人吗?
在表格中添加一个名为notification_sent的新列。 现在就当每个cron会添加一个WHERE子句和只在notification_sent设置为0获取数据,有点像如下:
SELECT name,amount, trans_id, msisdn, time_paid FROM customer where notification_sent = 0;
一旦你的数据发送电子邮件通知这些用户和更新标志notification_sent为1.
这样下一次你就不会重复发送它们了。
$ sql =“SELECT name,amount,trans_id,msisdn,time_paid FROM customer WHERE notification_sent = 0”?我其实并没有得到你。 –
是的,我说的是在表格中添加一个名为notification_sent的新列,并将其默认为0.现在,当您将通知更新标志发送到1时。 –
您需要“标记”您发送通知的记录,所以当cron触发器时,你只能选择那些没有被“标记”的行(如果有的话)。这就是@chandresh_cool告诉你的。 –
在该表中添加新列状态和sent_at。 运行cron作业后,您可以更新状态并sent_at
SELECT name,amount,trans_id,msisdn,time_paid FROM customer where status = 0;
如果要定期运行cron作业,可以在where条件下使用sent_at列。 SELECT name,amount,trans_id,msisdn,time_paid FROM customer where status = 0 and sent_at!= ?;
的cron成功后,您可以使用
更新表设置状态= 1,其中根据您的要求
你有所有选中的trans_id。在cron作业之后,你可以像update table set status = 1那样更新这里的id(trans_id1,trans_id2)。 – piyushiiitm
你可能需要考虑在TRANS_ID(trans_id1,trans_id2 .. trans_idn )
条件将“WHERE time_paid>”&cron作业完成的时间添加到'$ sql'变量中...... – Dave