Сравнивая две таблицы, обновите, если дублирующийся столбец, вставьте, если нет совпадения

У меня есть две таблицы tmp_table, test_contacts. tmp_table создается из загрузки CSV. Иногда при загрузке csv у нас будет электронное письмо уже в таблице test_contacts. Вот код, который я должен сравнить обновить / вставить. Оператор IF выполняется нормально, но mysql_query внутри ELSE не работает.

$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

Решение

То, что вы хотите сделать, возможно, лучше сделать с 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

Другие решения

Попробуйте вставить запрос без «INTO»

INSERT test_contacts SELECT * FROM tmp_table;

это что-то вроде копирования строк одной таблицы в другую. Надеюсь, это сработает.

0

По вопросам рекламы [email protected]