在重复键上忽略 - 更新多个表

时间:2012-08-15 03:41:30

标签: mysql insert duplicates

我试图将数据插入到两个表(table1和table2)中,条件是输入table1的数据的唯一性。 Table1在pop& amp;电子邮件&邻里。这个想法是,如果同一个人在一个社区中提交相同的流行音乐,那么两个表中都没有任何事情发生。如果其他人输入相同的pop和邻居,那么它输入table1中的数据并将table2中的投票增加1.我听到有人在谈论“重复键忽略”,我认为如果按照以下方式实现,我会工作但我是实际上并不确定命令是否真实:

 mysql_query("INSERT INTO `table1` VALUES ('$pop','$first', '$last', '$email',
'$neighborhood') on duplicate key ignore (INSERT INTO `table2` 
VALUES ('$pop', '$neighborhood','$votes', '$city') ON DUPLICATE KEY UPDATE 
`votes` = `votes` +1)"); 

我有以下代码可以工作,但了解它会将数据输入table2 不管table1中的唯一数据。

 mysql_query("INSERT INTO `table1` VALUtS ('$pop','$first', '$last', '$email', '$neighborhood')"); 
 mysql_query("INSERT INTO `table2` VALUES ('$pop', '$neighborhood', '$votes', '$city') ON DUPLICATE KEY UPDATE `votes` = `votes` +1");

如果您有任何疑问,请与我们联系。

1 个答案:

答案 0 :(得分:0)

为什么没有一张桌子?将您的唯一键更改为pop,邻居,电子邮件(因此pop,邻居是最左边的两个,可以在一个组中使用)并删除'votes'列。然后,您可以运行SELECT pop, neighborhood, count(*) AS votes FROM table1 GROUP BY pop,neighborhood;

之类的查询

我认为没有ON DUPLICATE KEY IGNORE这样的东西,但有INSERT IGNORE INTO ...基本上说如果插入失败则不会返回任何错误。如果你需要保留单独的表,你必须运行第一个查询,检查你是否有重复的密钥错误,然后在重复的密钥更新中插入...到第二个表。