2014-09-04 53 views
-5

电子邮件帖子所以我有一个订阅表,这里的模式查询数据库,然后从那里用户的埋入到

+-------------+------------------+------+-----+---------+----------------+ 
| 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小时制的事情,但是当我说自动化的时候,我的意思是它会自己查询和发送电子邮件。任何指针或想法?

+1

您应该使用'date'或'datetime'将数据存储在数据库中,而不是字符。如果*有*将它们存储为字符,则使用格式YYYY-MM-DD HH24:MI:SS。 – 2014-09-04 02:34:44

+0

是的,我知道。我只用它进行测试。但是,谢谢:) @GordonLinoff – Idris 2014-09-04 02:35:14

+2

你为什么会故意做错了“但仅限于测试”?!?! – 2014-09-04 02:36:01

回答

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 
+0

那你用什么查询?就可交付性而言,您可能希望从php调用单个邮件(),收件人字段包括所有正在收到邮件的用户。尽可能少地使用mail(),如果你正在做很多邮件 – 2014-09-09 22:01:49

+0

我更新了查询。为什么我应该尝试尽可能少地使用'mail()'?需要太多的电力? @ J-Dizzle – Idris 2014-09-09 22:04:01

+0

有些东西叫垃圾评分和发件人分数,如果你不小心,那么你的所有邮件将直接进入收件人的垃圾邮件文件夹。当你使用尽可能少的邮件()来完成脚本时,它也会减少脚本的运行时间 – 2014-09-09 22:12:41

-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); 
        } 

       } 

      } 
+0

我没有做特定用户。我想通过所有的用户,并发送电子邮件给所有他们的东西。和'mysql' ....真的吗? – Idris 2014-09-06 14:08:35

0

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

我kindof试着做什么你使用SQL小提琴的说法,但在尝试出来这似乎是不可能与当前模式。在上面的链接中,我有很多关于如何完全重新设计架构的评论。查询是一个非常头痛的问题,除非你设置了一个新的模式,否则不可扩展。

+0

那么现在的电子邮件部分呢?我必须遍历所有的用户并通过电子邮件发送他们的内容..... – Idris 2014-09-06 14:12:49

+0

选择电子邮件正在经历的内容,并将其连接成一个逗号分隔列表。把它放到[php的mail()函数](http://php.net/manual/en/function.mail.php)的收件人字段中。你可以做到! – 2014-09-06 15:20:42

+0

我觉得我比现在更难。所以我在我自己的计算机上尝试SQL,[this](http://pastebin.com/VBfJjXhH)是它的外观,我得到的只是'Array()',不知道为什么会发生这种情况,尽管我有记录.... – Idris 2014-09-06 18:06:50

-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 
    } 
相关问题