通过电子邮件通知用户新评论

时间:2015-07-17 12:20:24

标签: php mysql

我有一个博客,我想添加一个功能"通过电子邮件通知我新评论"每个帖子,当用户评论帖子时。

我正在使用PHP和MySQL。

我正在考虑向评论了一些帖子的用户发送邮件,并选中了复选框"通过电子邮件通知我新评论"查询如下:

$query = mysql_query("SELECT COUNT(post_id) AS NumberOfComments FROM comments WHERE post_id = $post_id");

$row = mysql_fetch_assoc($query);

if($row['NumberOfComments '] > $NumberOfComments){
    mail("someone@example.com","subject","message");
}

但如果有人从帖子中删除了评论并添加了新评论,那么评论数量就会相同,也不会发送任何邮件。关于查询如何更好的任何想法?

2 个答案:

答案 0 :(得分:1)

在从评论到数据库的插入中执行此邮件,然后您不需要这个额外的查询。

编辑: 因此,您要存储想要在数据库中收到通知的用户 使用包含id user_id post_id的表格,我将其命名为comment_notify 然后你可以做那样的事情

// Insert comment to database
$userWhoWantGetNotified = mysql_query("SELECT * FROM comment_notify WHERE post_id = $postId");
while ($entry = mysql_fetch_assoc($userWhoWantGetNotified )) {
    $userId = $entry["user_id"];
    // get email from user_id
    mail(..);
}

答案 1 :(得分:1)

这取决于您想要通知用户的时间。

他们是否希望收到每条评论的通知?然后发布评论的功能也会发送通知。每次发布评论时,请检查要通知的用户并通知他们。

他们是否希望定期(每日,每周等)通知存在新评论?然后你还是不想算数。在这种情况下,您想要检查是否存在新记录。有几种方法可以解决这个问题:

  1. 基于标识符。如果您知道有关用户被通知的最后评论的ID(您可能需要将其存储在通知表中的某个位置),那么您将检查是否存在高于该通知表的新ID。如果是,则有新评论。
  2. 根据日期。如果您知道用户被通知的最后一条评论的时间戳(您可以在某处存储或根据通知期间即时计算),那么您可以检查自那时起是否存在新评论。如果是,则有新评论。
  3. 正如您所发现的那样,只需计算记录并不是您正在寻找的有意义的指示。所有记录计数都会告诉您有多少记录。如果您想知道何时发布了这些记录,您需要某种时间戳。如果您想知道记录是否与先前已知的记录匹配,则需要某种标识符。

    永远不要假设从不包含该信息的数据中获取信息。存储您需要知道的信息。