2016-06-13 69 views
0

我想選擇並僅使用在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

回答

1

在表格中添加一個名爲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告訴你的。 –

0

在該表中添加新列狀態和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