0

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

PostA:我正在关注
PostB:我正在关注
PostA:我发表了评论
PostB:其他人发表了评论

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

下一个...

PostB: I posted a comment.

我不应该收到通知,但其他人应该。


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

  1. 我设置了一个运行条件。
  2. 我使用 SQL 查询设置收件人列表。
  3. 我为电子邮件创建个性化插入(即对您关注的帖子的新评论)。

对于这个例子,我有 3 个表:

  1. PostFollowers(用户 ID、电子邮件、PostID)
  2. 发布(PostID、消息、Notification_Sent <- BIT)
  3. PostComments (CommentID, UserID, Comment, Notification_Sent <- BIT)

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 子句中的计数?

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

4

1 回答 1

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
于 2013-08-28T09:41:06.553 回答