SQL Query根据特定要求生成电子邮件列表

时间:2013-08-28 09:20:21

标签: sql sql-server sql-server-2008

我似乎无法找到最佳方法。逻辑:想想Facebook这个例子。如果我对帖子发表评论,任何关注该帖子的人都应该收到一封电子邮件,但不是我,因为这是我最初的评论。但是,当其他人评论我正在关注的帖子时,我会收到通知。

  邮政:我正在关注邮政B:我正在关注邮政A:我发表了评论   PostB:其他人发表评论

我应该收到一封关于PostB但不是PostA的电子邮件。

下一步...

PostB: I posted a comment.

我不应该收到通知,但另一个人应该。


我正在使用个性化的电子邮件调度程序,这是工作流程:

  1. 我设定了跑步条件。
  2. 我使用SQL查询设置了收件人列表。
  3. 我为电子邮件创建了个性化插页(即,您关注的帖子上的新评论)。
  4. 此示例我有3个表:

    1. PostFollowers(UserID,Email,PostID)
    2. 发布(PostID,消息,Notification_Sent< -BIT)
    3. PostComments(CommentID,UserID,Comment,Notification_Sent< - BIT)

    4. Step1 :设置运行条件

      SELECT * FROM PostComments WHERE Notification_Sent = 0
      

      如果返回值,应用程序将执行广告系列。

      Step2 :选择收件人

      SELECT 
           a.Email
          ,a.PostID
      
           FROM PostFollowers
           INNER JOIN PostComments b on a.PostID = b.PostID
           WHERE b.Notification_Sent = 0
      

      因此,我的上述收件人查询中包含的任何人都在关注当前还有尚未发送通知的评论的帖子。

      调整查询的最佳方法是什么,以便收件人只是跟踪帖子的人,但任何相关的评论都不是他们自己的。如果存在不是由他们自己创建的评论,他们应该只收到电子邮件。说一些时间流逝,我在一篇文章上发表了10条评论。电子邮件应发送给任何正在关注的其他人。然后有人出现并发表评论。我现在应该收到一封电子邮件。

      我可能过度思考了这一点。也许是一个减去我的评论并在WHERE子句中的计数?

      谢谢你,我有点累了...希望我的问题很明确。

1 个答案:

答案 0 :(得分:0)

由于NoGotnu已经提到过以下查询应该做的工作

SELECT 
     pf.Email
    ,pf.PostID
FROM 
     PostFollowers pf
INNER JOIN 
     PostComments pc ON 
     pf.PostID = pc.PostID
WHERE 
         pc.Notification_Sent = 0 
     AND pf.UserID != pc.UserID