我在 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
订阅者获取和记录
$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_mode
或NULL
,BINARY
问题?使用 MyISAM 的数据库引擎。
问候。
当您插入表格时,您应该检查电子邮件是否已存在。
例
$query = "SELECT email from subscribers";
获取该查询,然后在之后检查电子邮件是否存在
if($query->fetch->rowcount < 1){
$query = "Insert into subscribers(email) values (email)"
}
您也不应该手动插入 id,只需打开自动增量即可。