2011-01-14 99 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 [比较]日期....),然后依次通过记录由证书到期过滤或基团的单个查询。

相关问题