2011-01-14 104 views
1

我有一個包含12個醫技ceritifcations,到期日這個大數據庫表,文件的鏈接,他們是從什麼公司。我需要在認證到期日的90,60,30和15天內通過電子郵件生成報告。自動生成基於日期(的ColdFusion)電子郵件

這裏的DATEBASE的樣子:

certID, 
profileID, 
cprAdultExp, 
cprAdultcompany, 
cprAdultImage, 
cprAdultOnFile, 
cprInfantChildExp, 
cprInfantChildcompany, 
cprInfantChildImage, 
cprInfantChildOnFile, 
cprFPRExp, 
cprFPRcompany, 
cprFPRImage, 
cprFPROnFile, 
aedExp, 
aedcompany, 
aedImage, 
aedOnFile, 
firstAidExp, 
firstAidcompany, 
firstAidImage, 
firstAidOnFile, 
emtExp, 
emtcompany, 
emtImage, 
emtOnFile, 
waterSafetyInstructionExp, 
waterSafetyInstructioncompany, 
waterSafetyInstructionImage, 
waterSafetyInstructionOnFile, 
bloodPathogensExp, 
bloodPathogenscompany, 
bloodPathogensImage, 
bloodPathogensOnFile, 
oxygenAdminExp, 
oxygenAdmincompany, 
oxygenAdminImage, 
oxygenAdminOnFile, 
lifegaurdingExp, 
lifegaurdingcompany, 
lifegaurdingImage, 
lifegaurdingOnFile, 
wildernessResponderExp, 
wildernessResponderCompany, 
wildernessResponderImage, 
wildernessResponderOnFile, 
notes 

我怎樣寫某種循環來檢查所有的日期(以EXP什麼是日期),然後存儲哪些即將到期,並通過電子郵件發送所有一個人的細節?

+0

看起來像你的數據庫設計是不是正常化如此熱衷! – time4tea 2011-01-14 20:50:53

回答

2

由於您必須通過CF發送電子郵件(我認爲),所以我會採取這種方式,每天運行一次計劃任務,檢查哪些行有15,30,60和90天的過期週年紀念日。所以計劃任務將運行幾個查詢,然後發送電子郵件。

的第一件事就是真正找到問題的行(我所有的SQL假定MS SQL服務器 - 其他RDBMS將有類似的語法):

<cfquery name="qExpiring"> 
    select 
    certID, 
    dateDiff(day, cprAdultExp, getDate()) as cprAdultExpDaysSince 
    dateDiff(day, cprInfantChildExp, getDate()) as cprInfantChildExpDaysSince 
    from yourTable 
    where 
    dateDiff(day, cprAdultExp, getDate()) in (15, 30, 60, 90) 
    or 
    dateDiff(day, cprInfantChildExp, getDate()) in (15, 30, 60, 90) 
</cfquery> 

這應該給你設置像這樣的結果:

certID|cprAdultExpDaysSince|cprInfantChildExpDaysSince|etc. 
___________________________________________________________ 
xxxxxx|30     |5       |etc. 
xxxxxx|16     |60      |etc. 
xxxxxx|2     |90      |etc. 

任何有匹配的15,30,60,90你有興趣處理進一步。你可以使用一個query of queries做到這一點:

<cfquery name="qAdultExpRenewal" dbtype="query"> 
    select * from qExpiring 
    where cprAdultExpDaysSince in (15, 30, 60, 90) 
</cfquery> 

cn的,您再遍歷這些記錄併發送基於對cprAdultExpDaysSince值適當的電子郵件。

你缺少信息公平一點給你一個全面的答案,但我希望這將指向你在正確的方向。

+0

@orangepips:你正常化了:) – 2011-01-15 17:32:27

1

您proably需要某種愚蠢的,巨大的查詢,看起來像

select "CPR Adult", cprAdultExp, cprAdultcompany, cprAdultImage, cprAdultOnFile from thebigtable where cprAdultExp [comparison] interestingdate 
union 
select "CPR Child", cprChild.... 
union ... 

然後遍歷你回去行,並使用第一列指出哪些ceritification即將到期。

1

如果你有訪問數據庫,你應該創建一個或多個視圖,只有那些誰是過期或添加一個字段天,直到到期每個證書和查詢,讓您。可替代地,可以編寫其抓住所有的信息,其中的任何證書正到期(WHERE cprAdultExp [比較]日期或cprInfantExp [比較]日期....),然後依次通過記錄由證書到期過濾或基團的單個查詢。

相關問題