【问题标题】:On duplicate key ignore - Update multiple tables重复键忽略 - 更新多个表
【发布时间】:2012-08-15 03:41:29
【问题描述】:

我正在尝试将数据插入两个表(table1 和 table2),条件是输入到 table1 的数据的唯一性。 Table1 在流行 & 电子邮件 & 社区上有一个独特的键集。这个想法是,如果同一个人在附近提交相同的流行音乐,那么任何一张桌子都不会发生任何事情。如果其他人进入相同的人口和社区,那么它会在 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");

如果您有任何问题,请告诉我。

【问题讨论】:

  • 请停止使用已弃用的mysql_ 函数。它们很旧,不再维护。请切换到mysqli (mysqli_/mysqli::) 或PDO (PDO::)
  • 很有趣,我不知道,将看看mysqli和pdo。谢谢!

标签: mysql insert duplicates


【解决方案1】:

为什么没有一张桌子?将您的唯一键更改为 pop,neighborhood,email(所以 pop,neighborhood 是最左边的两个,可以在分组中使用)并删除“votes”列。然后您可以运行类似SELECT pop, neighborhood, count(*) AS votes FROM table1 GROUP BY pop,neighborhood;的查询

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

【讨论】:

  • 这似乎是合理的。我对一张表的担忧是,随着观察数量的大幅增加,它可能需要多长时间。它有一个汇总表,详细说明了每个流行、社区组合的投票,难道不能花一点时间吗?
  • 如果您计划获得数亿张投票结果,并且每秒会多次查看结果,并且结果需要 100% 准确,那么使用汇总表将是一个好主意。如果表中有
  • 感谢 Kadaan,这听起来不错 - 我会努力让它发挥作用。
猜你喜欢
  • 1970-01-01
  • 2013-10-31
  • 2012-08-04
  • 1970-01-01
  • 2011-01-22
  • 2015-10-15
  • 1970-01-01
  • 1970-01-01
  • 2018-06-01
相关资源
最近更新 更多