Php Mysql添加重复数据,尽管控件

Php Mysql添加重复数据,尽管控件,php,mysql,duplicates,Php,Mysql,Duplicates,我在mysql表中添加数据时遇到问题。我创建了一个简单的时事通讯系统。系统将发送的电子邮件地址添加到任务表中,并在发送前检查其是否已发送。但每次都会添加重复的记录,例如;我的电子邮件列表包含3000条记录,但表中显示6000条记录 这里是我的表结构和查询 订户表 ID subscriber_mail -------------------- 1 mail1@gmail.com 2 mail2@gmail.com 3 mail3@gmail.com 4 mail4@gm

我在mysql表中添加数据时遇到问题。我创建了一个简单的时事通讯系统。系统将发送的电子邮件地址添加到任务表中,并在发送前检查其是否已发送。但每次都会添加重复的记录,例如;我的电子邮件列表包含3000条记录,但表中显示6000条记录

这里是我的表结构和查询

订户表

ID   subscriber_mail
--------------------
1    mail1@gmail.com
2    mail2@gmail.com
3    mail3@gmail.com
4    mail4@gmail.com
ID   subscriber_mail  CID
---------------------------
1    mail1@gmail.com    1
2    mail2@gmail.com    1
3    mail3@gmail.com    1
4    mail4@gmail.com    1
任务表

ID   subscriber_mail
--------------------
1    mail1@gmail.com
2    mail2@gmail.com
3    mail3@gmail.com
4    mail4@gmail.com
ID   subscriber_mail  CID
---------------------------
1    mail1@gmail.com    1
2    mail2@gmail.com    1
3    mail3@gmail.com    1
4    mail4@gmail.com    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'] ."'
        ");
     }

}
所以,这个系统可以很好地用于我的localhost和namescape,Godaddy,没有重复的记录,但是一些托管服务会在任务表中添加相同的记录。它可能是
sql\u模式
NULL
二进制
问题?数据库引擎使用MyISAM


问候。

当您插入表格时,应检查电子邮件是否已存在

范例

$query = "SELECT email from subscribers";
获取该查询,然后检查之后是否存在电子邮件

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

}
if($query->fetch->rowcount<1){
$query=“插入订阅服务器(电子邮件)值(电子邮件)”
}

您也不应该手动插入id,只需打开自动增量即可。

在插入表格时,您应该检查电子邮件是否已经存在

范例

$query = "SELECT email from subscribers";
获取该查询,然后检查之后是否存在电子邮件

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

}
if($query->fetch->rowcount<1){
$query=“插入订阅服务器(电子邮件)值(电子邮件)”
}

您也不应该手动插入id,只需打开自动递增。

是的,但是订阅者获取查询只选择未发送的邮件,加入为(t.subscriber\u mail为NULL)。如果我检查此循环中的任务列表,是否会降低系统性能?如果我尝试检查每个循环中有1m条记录的任务表?@GökhanAYVAZ您可以将发送的任务表保存到一个文件中,然后从中加载它吗。这样,性能就不会有问题,而且取决于电子邮件大小,性能也不会有问题。是的,但是订阅者获取查询只选择未发送的邮件,加入为(t.subscriber\u mail为NULL)。如果我检查此循环中的任务列表,是否会降低系统性能?如果我尝试检查每个循环中有1m条记录的任务表?@GökhanAYVAZ您可以将发送的任务表保存到一个文件中,然后从中加载它吗。这样,性能就不会有问题,而且根据电子邮件大小,性能也不会有问题。