私はソーシャル ネットワークの Web アプリケーションに取り組んでおり、メールを有効にしていないユーザーにリマインダー メールを再送信する必要がある状況に陥りました。
問題は、DB を調査したところ、多くの電子メールが重複していることがわかりました (明らかに電子メールの一意性に関する検証が行われていませんでした。そのため、知っておく必要があるのは、DB からこれらのフィールド、ユーザー名、電子メール アクティベーション コード、電子メールを取得することです。アクティベーションメールを再送信できるように、メールが重複している場合は、そのうちの 1 つだけを返す必要があります (つまり、john@hotmail.com というメールアドレスを持つユーザー john と john@hotmail.com というメールアドレスを持つユーザー john1 がいる場合) 、john1または2に関係なく、これらのjohnの1つだけを取得したいので、(Group By Email)でSQLクエリを追跡することを考えました。
問題は、group by 句にない他のフィールドを選択できないことです。ここでの解決策は、私が気に入らないものです。リストを作成し、ユーザーにメールを送信する必要があるたびに、リスト全体を繰り返し処理して、このメールが存在しないことを確認します。存在しない場合は、リストに送信してから、メールをに追加しますリスト。
次のようなもの:
if(!EmailIsInList(email)){
SendActivationEmail(email);
AddEmailToList(email)
}
else { DoNotSend); }
実際、私はこの方法で問題を解決しましたが、それでも私は自分の解決策が好きではありません。何か案は?