比较两个表如果重复列则更新,如果不匹配则插入

时间:2014-10-26 00:51:09

标签: php mysql sql-update sql-insert

我有两个表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);

2 个答案:

答案 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;

这类似于将一个表的行复制到另一个表。希望它可以工作。