【发布时间】:2009-02-25 12:31:52
【问题描述】:
我正在开发一个社交网络 Web 应用程序,我遇到了一种情况,我需要向尚未激活电子邮件的用户重新发送提醒电子邮件。
问题是当我调查数据库时,我发现许多电子邮件是重复的(显然没有对电子邮件唯一性进行验证。所以我需要知道的是从数据库中检索这些字段的用户名、电子邮件激活码, 电子邮件,以便我可以重新发送激活电子邮件,对于重复的电子邮件,我只需要返回其中一个(即,如果我有用户 john 的电子邮件 john@hotmail.com 和用户 john1 的电子邮件 john@hotmail .com 也是,我只想检索这些 johns 中的一个(无论 john1 还是两个),所以我想通过(Group By Email)跟踪 SQL 查询。
问题是我无法选择不在 group by 子句中的其他字段。我在这里的解决方案是我不喜欢的;我创建了一个列表,每次需要向用户发送电子邮件时,我都会遍历整个列表以确保该电子邮件不存在,如果它不存在,我发送给它,然后将电子邮件添加到列表。
类似于以下内容:
if(!EmailIsInList(email)){
SendActivationEmail(email);
AddEmailToList(email)
}
else { DoNotSend); }
实际上我通过这种方式解决了问题,但我仍然不喜欢我的解决方案。有什么想法吗?
【问题讨论】:
-
你能描述一下表结构吗?是否所有字段(用户名、电子邮件激活码、电子邮件、激活标志)都在同一个表中,或者它们位于不同的表中(例如用户表(UserId、UserName、Email、IsActivated)和电子邮件表(EmailId、UserId、日期、消息) ))?
-
这是表格结构。表 1 用户:UserID pk Email RegisterationDate。表 2 UserActivation:ID pk、UserID fk 参考用户(UserID)、EmailActivated 位、Email 代码。现在我需要结果集如下用户ID - 电子邮件 - 电子邮件代码 - 用户名(没有多余的电子邮件)
-
不知道为什么这是个问题。太多的电子邮件堵塞了您的系统?用户抱怨他们不想使用的帐户上的电子邮件?您希望根据电子邮件回复激活用户帐户。谁在乎两个用户是否共享一个电子邮件帐户?
标签: asp.net sql sql-server aggregate