2012-07-10 115 views
1

我創建了一個電子郵件程序,用於檢查用戶最後一次登錄的時間,如果用戶在10天內沒有登錄,則發送給他/她一封電子郵件。 現在我希望系統檢查同一用戶是否做了兩次,並通過電子郵件發送給他們不同的電子郵件。 表1用戶:mysql/php電子郵件問題

id - name - loggedindate 
0 john  7/11/2012 
1 mark  7/6/2012 
2 johnny 7/6/2012 
3 bruce  7/2/2012 

表2郵件領域如下:

id - days -emailtosend - numberoftimeseventhappens 
0  4  hello     1 
1  4  blabla     2 
2  6  example    1 
3  3  to      1 
4  4  demonstrate   1 

所以這裏例如標記和約翰尼didnt登錄的4天。 第一次發生事件時發給他們電子郵件「你好」 第二次事件發生電子郵件發送者需要發送它們「blabla」 因此可以說標記不會登錄4天,第一封電子郵件將會去 然後他在第5天登錄,然後又過了4天他沒有登錄,我想給他發送第二封電子郵件,該電子郵件將在表2中ID=2 該文件在一個cron上運行,並檢查每2小時 有關如何執行的任何想法它呢?我只需要這樣做的方式,而不是我自己寫的實際代碼,我一直把我的頭髮拉過來。

回答

1

向用戶表添加一個新字段,用於跟蹤發送給他們的最後一種電子郵件類型。下一次你必須發送電子郵件,你發送「最後一封電子郵件+ 1」

+0

是的,我考慮過這個問題,但是文件運行在cron上,每2小時檢查一次其他的東西和電子郵件......如果我這樣做,那麼在同一天他們將獲得所有的電子郵件。 – cppit 2012-07-10 23:57:48

1

我會建議規範化你的數據集。例如,你可以有三個表:

ACCOUNT 
LOGIN 
NOTIFICATION 

結構可能是這樣:

ACCOUNT 
----------------- 
ID | USER | EMAIL 

LOGIN 
----------------- 
ID | TIMESTAMP 

NOTIFICATION 
----------------- 
ID | TIMESTAMP 

現在你可以有一個關於這三張表上面的一個觀點,即只顯示,如果一個帳戶ID上次登錄時間戳> =今天 - 4天。此外,您可以從通知中獲得計數,以查看您以前通過電子郵件發送過用戶的次數,或者您可能希望執行一些操作,例如查看自上次通知發送以來經過了多少時間,如果發送時間爲5天,則發送「blabla」 ,但如果它超過了某個閾值,那麼發送「你好」。

LOGIN.TIMESTAMP <= today - 4 days 
AND LOGIN.TIMESTAMP > MAX(NOTIFICATION.TIMESTAMP) 
AND MAX(NOTIFICATION.TIMESTAMP) - 2NDLARGEST(NOTIFICATION.TIMESTAMP) BETWEEN 5 AND 30 
0

馬克b應答它是正確的,但還需要另外一個DateTime列添加到用戶:

所以,你可能會以電郵「blablah」(即:last_email_sent)。 因爲你的cron php文件應該做的是檢查自上次登錄以來的多少天,如果last_email_sent> = 4天或它爲空,那麼你發送last_email + 1並更新last_email_sent(到今天的日期)和last_email(last_email + 1)。