gpt4 book ai didi

php - 在特定条件下对一列使用 MySQL IGNORE

转载 作者:可可西里 更新时间:2023-11-01 07:52:53 26 4
gpt4 key购买 nike

我想将 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 在这里不起作用,原因如下:

  1. 我无法将电子邮件和电话设为唯一列
  2. 电话号码可能为空但有一个电子邮件条目,这可能会打破独特的模式

问题说明

我有两个办公室使用该表来存储他们的客户记录。某人可以是两个办公室的客户。这意味着他的记录可以在表中出现两次,但对于表中的每个 account_id 只能出现一次。现在的挑战是向表中插入多条记录,确保一条记录不会为每个 account_id 重复。

最佳答案

我不太清楚您要实现的目标,但看起来您只需要添加一些两列唯一约束即可。

  • 对于给定的 account_idemail 必须是唯一的:
ALTER TABLE your_table ADD UNIQUE (account_id, email);
  • 对于给定的 account_id电话号码 必须是唯一的:
ALTER TABLE your_table ADD UNIQUE (account_id, phone);

两个索引可能同时存在于您的表中。两者都可能引发“重复键违规”错误,并会触发插入的 IGNOREON DUPLICATE 子句。


也就是说,您的结构存在问题。您即将复制与客户有业务往来的每个 account_id 的详细信息。

您应该有一个customers 表,其中包含您所有客户的详细联系信息(而且只有那个),另一个accounts 表——您的“办公室”,如果我理解的话对——最后是一个关系表来模拟 n-n relationship 客户账户之间:

CREATE TABLE customers_accounts (
customer_id INT NOT NULL,
account_id INT NOT NULL,
PRIMARY KEY (customer_id, account_id),
FOREIGN KEY (customer_id) REFERENCES customers(id)
FOREIGN KEY (account_id) REFERENCES accounts(id)
);

关于php - 在特定条件下对一列使用 MySQL IGNORE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17636330/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com