我有一个包含以下列的列:
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
... ... ...
有没有简单的方法可以做到这一点?非常感谢!!
答案 0 :(得分:1)
您基本上想要规范化数据,并且可以使用MySQL查询来执行此操作:
使用tv_programs
自动增量创建一个表id
表,name
索引唯一
INSERT INTO tv_programs(name)SELECT DISTINCT
tv_program
来自original_table
现在你有一个包含程序的表,它们的id
是由MySQL自动创建的,所以你现在必须运行带连接的UPDATE(使用字符串名称,如果你有大量数据,可能会很慢)索引,但你只需运行一次)并使用连接表的id更新原始表(tv_programs)
UPDATE original_table rt LEFT JOIN tv_programs tp ON ot.tv_program = tp.name SET ot.tv_program = tp.id
现在您可以将tv_program
列的类型更改为INT
重复另一个表格。在之前进行备份,或者在原始表中添加一个列(例如tv_program_id)并使用ID更新该列,以便在删除旧列之前运行其他查询来检查结果并继续
希望这很清楚。