查询数据库然后通过电子邮件发送用户所在的帖子

时间:2014-09-04 02:33:26

标签: php mysql sql email

所以我有一个订阅表,这里是架构

+-------------+------------------+------+-----+---------+----------------+
| Field       | Type             | Null | Key | Default | Extra          |
+-------------+------------------+------+-----+---------+----------------+
| id          | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
| user_id     | int(11)          | YES  |     | NULL    |                |
| sub_to      | int(11)          | YES  |     | NULL    |                |
| date_subbed | varchar(255)     | YES  |     | NULL    |                |
+-------------+------------------+------+-----+---------+----------------+

非常基本,这是一个示例行

+----+---------+--------+------------------------+
| id | user_id | sub_to | date_subbed            |
+----+---------+--------+------------------------+
| 23 |      13 |      2 | 08/19/2014 07:44:49 pm |
+----+---------+--------+------------------------+

所有非常基本的东西。因此,用户13基本上是用户2的底层。因此,假设另一个用户加入该网站,另一行创建了用户14个用户5

现在用户2和用户5在网站上发布消息并将其插入数据库。我希望订阅 某人的用户收到包含最新帖子的电子邮件。

//Get user subs
$stmt = $con->prepare("SELECT * FROM subscription");
$stmt->execute();

foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $key) {
    print_r($key);
}

我已经尝试了一个foreach循环,但我看不出它是如何工作的。总而言之,我想在用户发帖时给用户发送电子邮件。我将每24小时发送一封电子邮件,所以我不会杀死服务器。我想确保它也完全自动化。我知道如何做24小时的事情,但当我说自动化时,我的意思是它将通过自己查询和发送电子邮件。任何指针或想法?

4 个答案:

答案 0 :(得分:1)

我明白了。只需使用ob_start(),然后遍历每个用户。选择他们订阅的帖子。然后在循环内部通过电子邮件发送给每个用户我用过这个查询

SELECT
    articles.*
    FROM
    articles
    INNER JOIN subscriptions ON articles.from_id = subscriptions.sub_to
    INNER JOIN users ON subscriptions.user_id = users.id
    WHERE
    users.email = :email

答案 1 :(得分:0)

http://sqlfiddle.com/#!2/a1ceb/9

我有点尝试用SQL小提琴做你的说法,但在试用它时,使用当前架构似乎是不可能的。在上面的链接中,我有很多关于如何完全重新设计架构的评论。除非您设置新架构,否则查询非常令人头疼并且无法扩展。

答案 2 :(得分:-1)

           $sql="select email id from subscription"; 
           $rs=mysql_query($sql); //resultset
           if(mysql_num_rows($rs)>0) //checking whether anyone subscribed the user or not
           {
                 while($d=mysql_fetch_array($rs))
                 {
                     $sql1="select * from subscription where sub_to in ('".$d["user_id"]."')";
                     $rs1=mysql_query($sql1);

                     while($ds=mysql_fetch_array($rs1)
                     {

                         $to=$ds["email_id"];//assuming the field for email id
                         $subject="";
                         $msg="";  
                         @mail($to,$subject,$msg);
                     }

                 }

           }

答案 3 :(得分:-2)

    $sql="select email id from subscription";
    $rs=mysql_query($sql); //resultset
    if(mysql_num_rows($rs)>0) //checking whether anyone subscribed the user or not
    {
       while($d=mysql_fetch_array($rs))
       {               
            $sql1="select email id from subscription where sub_to in('".$d["user_id"]."')";
            $rs1=mysql_query($sql1);
            while($ds=mysql_fetch_array($rs1))
            {
                  $to=$ds["email_id"];//assuming the field for email id
                  $subject="";
                  $msg="";  
                  @mail($to,$subject,$msg);
            }//inner while end
       }//outer while end
    }