【发布时间】:2015-04-05 08:10:45
【问题描述】:
我有一个 MySQL 数据库,其中包含 1000 条人事记录,而且经常有重复。
对于每个至少有一个重复项的情况,我希望能够删除除一个之外的所有重复项,然后用我没有的那个更新对那些已删除外键的任何引用。
例如,我们在下面看到两个Star Lord 实例:
+-----------------------+
| `users` |
+------+----------------+
| id | name |
+------+----------------+
| 1 | Star Lord |
+------+----------------+
| 2 | Star Lord |
+------+----------------+
| 3 | Iron Man |
+------+-----+----------+
+-----------------------+
| `messages` |
+------+-----+----------+
| from | to | text |
+------+-----+----------+
| 1 | 5 | hi |
+------+-----+----------+
| 2 | 5 | how r u |
+------+-----+----------+
| 5 | 2 | Good, u? |
+------+-----+----------+
这两个表应该变成:
+-----------------------+
| `users` |
+------+----------------+
| id | name |
+------+----------------+
| 1 | Star Lord |
+------+----------------+
| 3 | Iron Man |
+------+-----+----------+
+-----------------------+
| `messages` |
+------+-----+----------+
| from | to | text |
+------+-----+----------+
| 1 | 5 | hi |
+------+-----+----------+
| 1 | 5 | how r u |
+------+-----+----------+
| 5 | 1 | Good, u? |
+------+-----+----------+
这可以吗?我很乐意根据需要使用 PHP。
我找到了以下内容,但它仅用于查找外键用法,而不是替换特定键值的实例:MySQL: How to I find all tables that have foreign keys that reference particular table.column AND have values for those foreign keys?
奖励积分
可能有额外的数据需要在users 表中合并。例如,ID #1 的Star Lord 可能填充了phone 字段,但ID #2 的Star Lord 具有email 字段。
最坏的情况:他们都有一个字段,有冲突的数据。
【问题讨论】:
-
除非您进行人工干预,否则奖励积分几乎无法解决。你可以做空值,但除非你能为每个冲突想出一个规则,否则这是不可能的。
标签: php mysql foreign-keys