gpt4 book ai didi

php - 如何合并 MySQL 表中的两条冗余记录,维护所有 PK/FK 关系?

转载 作者:可可西里 更新时间:2023-11-01 06:32:56 26 4
gpt4 key购买 nike

假设我有一个表 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

还有其他几个表,比如ordersrewardsreceipts都有外键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 查询,否则可能会丢失完整性.

必须有更好的方法来做到这一点。

最佳答案

我从谷歌来到这里,这是我的 2 美分:

SELECT `TABLE_NAME` 
FROM `information_schema`.`KEY_COLUMN_USAGE`
WHERE REFERENCED_TABLE_SCHEMA='DATABASE'
AND REFERENCED_TABLE_NAME='customers'
AND REFERENCED_COLUMN_NAME='customer_id'

为保险起见添加数据库(您永远不会知道何时有人复制了数据库)。

这里我们不查找列名,而是查看外键本身

如果您更改删除限制以限制在删除/迁移子项之前无法删除任何内容

关于php - 如何合并 MySQL 表中的两条冗余记录,维护所有 PK/FK 关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5237005/

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