2016-01-20 35 views
1

我有一個問題,添加數據在MySQL表中。我創建了一個簡單的通訊系統。系統添加發送電子郵件地址到任務表和它的檢查之前,如果它已發送發送。但是每次添加重複的記錄都是例如;我的電子郵件列表包含3000條記錄,但表中顯示了6000條記錄Mysql添加重複的數據,儘管控制

這是我的表結構和查詢;

訂戶表

ID subscriber_mail 
-------------------- 
1 [email protected] 
2 [email protected] 
3 [email protected] 
4 [email protected] 

任務表

ID subscriber_mail CID 
--------------------------- 
1 [email protected] 1 
2 [email protected] 1 
3 [email protected] 1 
4 [email protected] 1 

訂戶獲取和記錄

$query = " 
    SELECT 
      S.* 
    FROM 
      subscribers AS S 
      LEFT JOIN tasks AS T ON (T.CID=". CAMPAIGN_ID ." AND S.subscriber_mail=T.subscriber_mail) 
      LEFT JOIN unsubscribes AS U ON (U.CID=". CAMPAIGN_ID ." AND S.subscriber_mail=U.subscriber_mail) 
    WHERE 
       (T.subscriber_mail IS NULL) 
      AND (U.subscriber_mail IS NULL) 

    "; 


$opSubs = $myconn->query($query) or die(mysqli_error($myconn)); 
while($opSubsRs = $opSubs->fetch_assoc()){ 
    -- SMTP connection -- 
    if($mail->Send()){ 
     $myconn->query("INSERT INTO tasks SET 
       CID=1, 
       subscriber_mail='". $opSubsRs['subscriber_mail'] ."' 
     "); 
    } 

} 

因此,這個系統對我的本地主機和Namecheap,Godaddy沒有重複記錄工作正常,但一些託管服務在任務表中添加相同的記錄。它可能是sql_modeNULL,BINARY的問題?使用MyISAM的數據庫引擎。

問候。

回答

0

當你插入表格時,你應該檢查電子郵件是否已經存在。

$query = "SELECT email from subscribers"; 

獲取該查詢,然後檢查是否存在郵件後

if($query->fetch->rowcount < 1){ 
$query = "Insert into subscribers(email) values (email)" 

} 

你也不要手動插入ID只要打開自動遞增。

+0

是的,但用戶提取查詢選擇只有未發送的郵件加入爲(T.subscriber_mail IS NULL)如果我檢查此循環中的任務列表可能會降低系統性能?如果我嘗試在每個循環中檢查具有1m記錄的任務表? –

+0

@GökhanAYVAZ你可以將你發送的文件保存到一個文件中,然後從中加載它。這種方式的性能不是問題,也取決於電子郵件的大小性能不應該是一個問題。 –