如何在cron启动作业时选择新记录

如何在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']; 

这很重要,因为数据将用于发送短信,而且我不想向某人发送短信两次。

请问,有人吗?

+1

你可能需要考虑在TRANS_ID(trans_id1,trans_id2 .. trans_idn )

条件将“WHERE time_paid>”&cron作业完成的时间添加到'$ sql'变量中...... – Dave

在表格中添加一个名为notification_sent的新列。 现在就当每个cron会添加一个WHERE子句和只在notification_sent设置为0获取数据,有点像如下:

SELECT name,amount, trans_id, msisdn, time_paid FROM customer where notification_sent = 0; 

一旦你的数据发送电子邮件通知这些用户和更新标志notification_sent为1.

这样下一次你就不会重复发送它们了。

+0

$ sql =“SELECT name,amount,trans_id,msisdn,time_paid FROM customer WHERE notification_sent = 0”?我其实并没有得到你。 –

+0

是的,我说的是在表格中添加一个名为notification_sent的新列,并将其默认为0.现在,当您将通知更新标志发送到1时。 –

+0

您需要“标记”您发送通知的记录,所以当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,其中根据您的要求

+0

你有所有选中的trans_id。在cron作业之后,你可以像update table set status = 1那样更新这里的id(trans_id1,trans_id2)。 – piyushiiitm