如何将字符串字段句子拆分为单词并将它们插入到具有相同键ID的新表中?

时间:2010-12-27 11:09:57

标签: mysql

我有一个名为Pads的表,其中包含一个名为keywords的字段,它有一个单词列表,也就是一个句子。

e.g。

Pad
ID=1 Keywords=red brown green
ID=2 keywords=green orange blue

关键字字段中可以包含40个字。

我想创建一个新的表关键字

e.g。

Keywords
ID=1 word=red
ID=1 word=brown
ID=1 word=green
ID=2 word=green
ID=2 word=orange
ID=2 word=blue

有人能指点我在某个sql上创建/插入这个新表吗?

编辑 - 回复Spinny Norman,我的字段和空格略有不同,不是逗号,不过那些我替换了,我收到错误,我看不出原因?...

1 个答案:

答案 0 :(得分:1)

这里有很多方法:http://dev.mysql.com/doc/refman/5.0/en/string-functions.html,但它们都要求你命名项目的索引。因此,如果您知道每个项目的关键字数量最多,则可以使用其中一个。例如,每个项目有3个关键字:

insert into keywords (id, word) (
    select id, replace(substring(substring_index(Keywords, ',', 1), length(substring_index(Keywords, ',', 1 - 1)) + 1), ',', '') as item1
    from Pads
union all
    select id, replace(substring(substring_index(Keywords, ',', 2), length(substring_index(Keywords, ',', 2 - 1)) + 1), ',', '') as item2
    from Pads
union all
    select id, replace(substring(substring_index(Keywords, ',', 3), length(substring_index(Keywords, ',', 3 - 1)) + 1), ',', '') as item3
    from Pads
);

您还可以过滤掉空值,以便能够使用“最多3个(在这种情况下)关键字”。

编辑:如果你只是这样做一次,你就不必使用工会了(而且,如果你这样做,你应该用一个选择显然包围整个联盟)。所以,请改用它:

insert into words (padid, word)
  select padid, replace(substring(substring_index(English45, ' ', 1), 
   length(substring_index(English45, ' ', 1 - 1)) + 1), ' ', '') as item1
   from Pads
   having item1 <> '';

重复2,3等,直到不再插入。