【发布时间】:2013-07-12 06:14:51
【问题描述】:
我想将 Gmail 中的记录导入到表格中,并且我不需要每个帐户都重复。
说明:
我有一个名为 list 的表,其定义如下:
id int(11),
account_id int(11),
email varchar(255),
phone varchar(30),
primary key(id),
FOREIGN KEY (account_id) REFERENCES accounts (id)
此表包含不同帐户的记录,并且可以认为一封电子邮件对两个或多个帐户有效。这意味着电子邮件可以在表格中重复,但每个 account_id 只能出现一次。
我从 Gmail 中导入了我的联系人(超过 700 个联系人,其他用户可能有更多)。
挑战:
我可以选择为每条记录运行两个查询(一个用于检查电子邮件或电话是否存在,第二个用于插入记录),在我的例子中是 1,400 个 SQL 查询,以使我能够插入所有导入的记录,确保没有列表中每个 account_id 的重复项。
我查看了 MySQL IGNORE 和类似的关键字,如 ON DUPLICATE KEY UPDATE,但它们似乎在这种情况下不起作用,因为我无法使电子邮件和电话列唯一,因为它们可能包含重复的内容。
插入这 700 条记录的最佳方法是确保每个 account_id 不会重复电子邮件和电话,而无需运行 1,400 次查询?
问题更新:
我不认为 INSERT IGNORE 可以在这里工作,原因如下:
- 我无法将电子邮件和电话设为唯一列
- 电话号码可能为空,但带有电子邮件条目,这可能会破坏独特的模式
问题说明
我有两个办公室使用该表来存储他们的客户记录。有人可以成为两个办事处的客户。这意味着他的记录可以在表中出现两次,但对于表中的每个 account_id 只能出现一次。 现在的挑战是在表中插入多条记录,确保每个 account_id 的记录不重复。
【问题讨论】:
-
我有点困惑——运行 700 个查询或 1400 个查询的选项——为什么?您可以将所有结果放入一个表中,然后在您的帐户表中运行一条插入语句以满足您的需求。
-
如何确保表中每个 account_id 没有重复项?
-
您的数据来自哪里?您是否有一个文本文件正在尝试使用 700 个插入语句运行?或者这 700 行是否已经在一个表中,而您只是想将它们的部分/全部/子集放到帐户表中?
-
我从 Gmail 导入并将我的数据放在一个数组中。
-
恕我直言,您必须使用相关示例数据来说明您的问题,其中每个 account_id 的电子邮件和电话号码中的重复项和所需的输出。这可能会帮助您更快地得到答案。现在还不清楚如果有重复的电子邮件但每个 account_id 有不同的电话号码,你想做什么,反之亦然。什么应该去目标表?