我有一个名为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,我的字段和空格略有不同,不是逗号,不过那些我替换了,我收到错误,我看不出原因?...
答案 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等,直到不再插入。