php – 在某些条件下在一列上使用MySQL IGNORE

我想将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都不重复记录.

解决方法:

你想要实现的目标对我来说并不是很清楚,但它看起来非常像你只需要添加一些两列独特的约束.

>对于一个给定的account_id,电子邮件必须是唯一的:

ALTER TABLE your_table ADD UNIQUE (account_id, email);

>对于一个给定的account_id,电话号码必须是唯一的:

ALTER TABLE your_table ADD UNIQUE (account_id, phone);

两个索引可能同时存在于您的表中.可能会引发“重复键冲突”错误,并会触发插入的IGnorE或ON DUPLICATE子句.

话虽如此,您的结构中存在问题.您即将复制客户与其共同使用的每个account_id的详细信息.

您应该有一个客户表,其中包含所有客户的联系详细信息(仅限于此),另一个帐户表 – 您的“办公室”,如果我理解正确 – 最后是一个关系表,用于在客户和帐户之间建模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)
);

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...