MySQL从具有set字段的表中迁移数据

时间:2016-07-15 14:57:08

标签: php mysql

我有一个包含2种语言的set列的表,以及包含订单的此表上的另一列。

是否可以迁移我的表并使用MySQL查询为每个设置项在新表中创建记录?

直接迁移记录适用于具有设置列且没有语言组合的记录。但是如果一条记录包含一组语言,我会留下一条记录,其中包含一个用于语言的空列。我最好希望在我的新桌子中插入2条新记录。

套装中每种语言一个。

INSERT INTO newtable (
    newtable.oldtable_id, 
    newtable.language, 
    newtable.order
)
SELECT oldtable.id, oldtable.languages, oldtable.order
FROM oldtable
WHERE oldtable.order IS NOT NULL;

我怀疑这是可能的,但我仍然想知道是否有人可能有解决方法,因为我需要以某种方式迁移数据。

1 个答案:

答案 0 :(得分:1)

使用一个字段创建一个帮助程序表,该字段列出了可以在set列中的所有语言。该表可以是您在迁移后删除的临时表。然后创建一个insert ... select ...语句,在该语句中使用MySQL的find_in_set()函数加入辅助表上的源表:

INSERT INTO newtable (
newtable.oldtable_id, 
newtable.language, 
newtable.order
)
SELECT oldtable.id, helpertable.language, oldtable.order
FROM oldtable inner join helpertable ON find_in_set(helpertable.language, oldtable.languages)>0;