假设我有一个customers
包含以下字段和记录的表:
id first_name last_name email phone
------------------------------------------------------------------------
1 Michael Turley mturley@whatever.com 555-123-4567
2 John Dohe jdoe@whatever.com
3 Jack Smith jsmith@whatever.com 555-555-5555
4 Johnathan Doe 123-456-7890
还有其他几个表,例如orders
, rewards
,它们具有与该表相关的receipts
外键。customer_id
customers.id
如您所见,我的用户以他们无限的智慧为 John Doe 创建了重复记录,其中包含不一致的拼写和缺失的数据。管理员注意到这一点,选择客户 2 和 4,然后单击“合并”。然后提示他们为每个字段选择哪个值是正确的,等等,我的 PHP 确定合并的记录应该如下所示:
id first_name last_name email phone
------------------------------------------------------------------------
? John Doe jdoe@whatever.com 123-456-7890
假设 Doe 先生已经下了几个订单,获得了奖励,生成了收据.. 但其中一些与 id 2 相关联,有些与 id 4 相关联。合并的行需要匹配其他行中的所有外键与原始行匹配的表。
这就是我不知道该怎么做的地方。我的直觉是这样做:
DELETE FROM customers WHERE id = 4;
UPDATE customers
SET first_name = 'John',
last_name = 'Doe',
email = 'jdoe@whatever.com',
phone = '123-456-7890'
WHERE id = 2;
UPDATE orders, rewards, receipts
SET customer_id = 2
WHERE customer_id = 4;
我认为这可行,但如果稍后我添加另一个具有 customer_id 外键的表,我必须记住返回并将该表添加到我的合并函数中的第二个 UPDATE 查询中,否则可能会失去完整性。
必须有更好的方法来做到这一点。