2010-12-27 15 views
2

私はキーワードと呼ばれるフィールドを持つパッドというテーブルを持っています。文字列フィールド文を単語に分割し、同じキーIDを持つ新しいテーブルに挿入するにはどうすればよいですか?

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

キーワードフィールドには40語を入れることができます。

新しいテーブルを作成します。

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を指すことはできますか?

EDIT - ?しかし、私は置き換えられ、すべてのthatsと私はエラーを取得していますし、私はなぜ...

答えて

1

を見ることができない、私は少し異なるフィールドとスペースないカンマを持って、Spinnyノーマンに返信しますここにはかなり多くの方法があります: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」を使用できるようにするにはnull値を除外することができます。

EDIT:これを1回だけ実行している場合は、ユニオンを使用する必要はありません(また、そうした場合、選択したユニオンを囲むようにする必要があります)。したがって、これを代わりに使用してください:

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などを繰り返して、挿入がなくなるまで繰り返します。

+0

これは定期的に行う必要がありますか、一度だけ行う必要がありますか?一度しか挿入されていない場合は、行が挿入されなくなるまで手動でクエリを選択してください。 –

+0

一度だけ、手動で? – Jules

+0

ええと、あなたは組み込みの組合ではできません...選択してください。ただし、一度に1つのselectを使用することができます。私は編集します。 –

関連する問題