2016-04-13 22 views
0

変更が必要な2つのテーブルを持つMySQLデータベースがあります。あなたはこれがhiglyで想像できるように 最初の表は、ノート2つのテーブルのデータを使ったMySQLの更新

id type note 
1 1 24 months warranty 
2 1 12 months warranty 
3 2 Garage in Denver 
4 3 Pre sales maintenance done 
.... 

そして多くの車両テーブルを保持している車両テーブルとそのテキストにノートを保持するフィールドの代わりに、ポインタ

id licence_plate ... sales_notes ... 
1 XH34DN   ... <warranty>24 months warranty</warranty><garage>Garage in Denver</garage><maintenance>Pre sales maintenance done</maintenance> ... 
2 K4B3C6   ... <warranty>12 months warranty</warranty><garage>Garage in Sacramento</garage><maintenance>Pre sales maintenance not done</maintenance> ... 

を保持していますinneficientと私はメモのIDを保持するポインタに変更したい。

id licence_plate ... warranty_note garage_note maintenace_note ... 
1 XH34DN   ... 1    3   4 ... 
2 K4B3C6   ... 2    7   12 ... 

私はそれを手動で行うことはできますが、私はそれを自動的にタイプ別に作成したいと考えています。

notes.type = 1の場合、notes.noteテキストがveh.sales_notesにある場合は、vehicle.warranty_noteが更新されます。

どのようにそのようなものを構築するか?

私はこれを念頭に置いていますが、IDは機能しません。結果は更新されません

UPDATE tx_vehicle v, tx_note n 
SET v.garage_note = n.uid 
WHERE v.sales_notes LIKE ('%'+n.note+'%') 

答えて

0

MySQLには特別なXML parsing functionsがあります。

insert into your_new_notes_table (id, licence_plate, warranty_note, garage_note, maintenace_note) 
select 
    sn.id, 
    sn.license_plate, 
    (select nt.id from notes as nt where nt.type = 1 and nt.note = ExtractValue(sn.sales_note, "/warranty")) as warranty_note, 
    (select nt.id from notes as nt where nt.type = 1 and nt.note = ExtractValue(sn.sales_note, "/garage")) as garage_note, 
    (select nt.id from notes as nt where nt.type = 1 and nt.note = ExtractValue(sn.sales_note, "/maintenance")) as maintenance_note 
from note_types as nt 

が販売からの正確なノートがnote_typesテーブルに見つからない場合、それは失敗します。ノートテキストの比較を調整したり、類似の演算子、正規表現チェック、または他の関数に置き換えることができます。略語を完全な言葉に置き換えたり、独自のMySQL関数を作成することができます。さらに、内部でselectを包含する独自のMySQL関数を作成し、note_typesテーブルにノートが見つからない場合はnullを返すことができます。

既存のテーブルを更新したい場合は、私が提供されているように、あなたは同じselectjoinupdateクエリを実行する必要があります。

+0

Georgeさんに感謝しますが、sales_notesの値は同じではなく、同じであるため、XML解析では検出されません。 そして私はあなたがノートテーブルに挿入しようとしていません、私は車両テーブルの構造を変更したいと思います。 – Niall

+0

@ニオール私は私の答えにいくつかのメモを追加しました。正確な解決方法は、どのように似ているかによって異なります。文字の場合は、スペースを簡単に処理できます。一般的な略語、ミスタイプ、シンプルな同義語は、置換テーブルを介しても実行可能です。おそらく、プログラミング言語を使用して簡単に対処することができます。 –

関連する問題