0

我有一个表包含如下列:

time   tv_program        user_name
xxx    friends           John
xxx    Game of Thrones   Kate
... 
...

现在我想为 tv_program 和 user_name 创建单独的索引表,例如:

id tv_program
1  friends
2  Game of Thrones
3  ...
4  ...

id user_name
1  John
2  Kate
3  ...
4  ...

并更新原始表,将 tv_program 和 user_name 替换为索引号,而不是像

time    tv_program   user_name
xxx     1            1
xxx     2            2
...     ...          ...

有什么简单的方法可以做到这一点吗?非常感谢!!

4

1 回答 1

1

您基本上想要规范化您的数据,您可以使用 MySQL 查询来做到这一点:

创建tv_programs具有id自增,name索引唯一的表表

INSERT INTO tv_programs (name) SELECT DISTINCT tv_program FROMoriginal_table

现在你有一个包含程序的表,它们id由 MySQL 自动创建,所以你现在必须运行一个带有连接的 UPDATE(使用字符串名称,如果你有很多数据而没有索引可能会很慢,但你只运行一次) 并使用连接表 (tv_programs) 的 id 更新原始表

更新 original_table ot LEFT JOIN tv_programs tp ON ot.tv_program = tp.name SET ot.tv_program = tp.id

现在您可以将tv_program列的类型更改为 INT

对另一张桌子重复。之前进行备份,或者在原始表中添加一列(例如 tv_program_id)并使用 ID 更新该列,以便您可以在删除旧列并继续之前运行其他查询来检查结果

希望这很清楚。

于 2013-04-12T09:51:57.557 回答