我有两个表tmp_table,test_contacts。 tmp_table是从csv上传创建的。有时在csv上传中,我们将在test_contacts表中发送一封电子邮件。这是我必须比较更新/插入的代码。 IF语句正在执行,但ELSE中的mysql_query无效。
$query = "SELECT id FROM test_contacts ORDER BY id DESC LIMIT 1";
$result = mysql_query($query, $conn);
while($rows=mysql_fetch_assoc($result)){
echo $rows['id'];
$duplicate = mysql_query("SELECT test_contacts.email, tmp_table.email FROM test_contacts, tmp_table WHERE test_contacts.email = tmp_table.email");
if (mysql_num_rows($duplicate) > 0) {
mysql_query("UPDATE test_contacts, tmp_table SET test_contacts.accountnum = tmp_table.accountnum, test_contacts.type=tmp_table.type, test_contacts.rep=tmp_table.rep, test_contacts.lname=tmp_table.lname, test_contacts.fname=tmp_table.fname WHERE test_contacts.email=tmp_table.email");
} else {
mysql_query("INSERT INTO test_contacts (account,source,accountnum,tags,type,rep,lname,fname,title,company,address,addresstwo,city,state,zip,email,cell,officenum,email_status,date,country) SELECT tmp_table.account,tmp_table.source,tmp_table.accountnum,tmp_table.tags,tmp_table.type,tmp_table.rep,tmp_table.lname,tmp_table.fname,tmp_table.title,tmp_table.company,tmp_table.address,tmp_table.addresstwo,tmp_table.city,tmp_table.state,tmp_table.zip,tmp_table.email,tmp_table.cell,tmp_table.officenum,tmp_table.email_status,tmp_table.date,tmp_table.country FROM tmp_table");
}
echo "<h2>Contacts Uploaded</h2>";
mysql_query ('TRUNCATE TABLE tmp_table;');
mysql_close($conn);
答案 0 :(得分:1)
使用ON DUPLICATE KEY UPDATE
可能更好地完成您想要做的事情。为此,您需要标识指定重复内容的列。在这种情况下,我认为它是email
。因此,您需要将电子邮件声明为表中的主键或具有唯一索引。
然后insert
代码看起来像这样:
INSERT INTO test_contacts(account, source, accountnum, tags, type, rep, lname, fname, title,
company, address, addresstwo, city, state, zip, email, cell, officenum,
email_status, date, country
)
SELECT tt.account, tt.source, tt.accountnum, tt.tags, tt.type, tt.rep, tt.lname,
tt.fname, tt.title, tt.company,tmp_table.address, tt.addresstwo, tt.city, tt.state,
tt.zip, tt.email, tt.cell, tt.officenum, tt.email_status, tt.date, tt.country
FROM tmp_table tt
ON DUPLICATE KEY UPDATE account = VALUES(account),
. . .
country = VALUES(country);
您可以使用要分配的其他列填写. . .
。
答案 1 :(得分:0)
尝试不使用&#34; INTO&#34;
插入查询INSERT test_contacts SELECT * FROM tmp_table;
这类似于将一个表的行复制到另一个表。希望它可以工作。