1

私はこの大きなデータベーステーブルを持っており、12の医療証明書、有効期限、ファイルへのリンク、およびそれらの会社が含まれています。認証の有効期限から90、60、30、15日以内に電子メールでレポートを生成する必要があります。

日付ベースは次のようになります。

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のあるものはすべて日付です)、期限切れの日付を保存し、それらすべての詳細を人に電子メールで送信するためのある種のループを作成するにはどうすればよいですか?

4

3 に答える 3

2

CFを介して電子メールを送信する必要があるため(おそらく)、これにアプローチする方法は、15、30、60、および90日の有効期限がある行をチェックするスケジュールされたタスクを1日1回実行することです。したがって、スケジュールされたタスクはいくつかのクエリを実行してから、電子メールを送信します。

最初に、問題の行を実際に見つけることです(私のSQLはすべてMS SQL Serverを想定しています-他の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に一致するものはすべて、さらに処理することに関心があります。これを行うには、クエリのクエリを使用できます。

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

次に、これらのレコードをループして、の値に基づいて適切な電子メールを送信しますcprAdultExpDaysSince

あなたはあなたに包括的な答えを与えるためのかなりの情報を欠いていますが、これがあなたを正しい方向に向けることを願っています。

于 2011-01-15T12:55:03.337 に答える
1

あなたはおそらく、次のような愚かな巨大なクエリが必要です

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

次に、戻ってきた行を繰り返し、最初の列を使用して、有効期限が切れる認証を示します。

于 2011-01-14T20:54:42.787 に答える
1

データベースにアクセスできる場合は、1つまたは複数のビューを作成して、有効期限が切れているユーザーのみを表示するか、各証明書の有効期限までの日数のフィールドを追加してクエリを実行する必要があります。または、証明書の有効期限が切れるすべての情報(cprAdultExp[comparison]dateまたはcprInfantExp[comparison]date ....)を取得する単一のクエリを記述し、レコードをループして、証明書の有効期限でフィルタリングまたはグループ化することもできます。

于 2011-01-14T21:43:05.297 に答える