假设我有一个表客户,其中包含以下字段和记录:
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
还有其他几个表,例如订单,奖励,具有与此表的customers.id相关的外键customer_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查询,否则可能会失去完整性.
作为我评论的更新:
use information_schema; select table_name from columns where column_name = 'customer_id';
然后遍历生成的表并相应地更新.
就个人而言,我会使用你的本能解决方案,因为如果有包含需要免除的customer_id列的表,这可能是危险的.
原文地址:https://www.jb51.cc/php/137387.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。