2014-09-04 54 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 
    } 
相關問題