2016-11-03 9 views
0

私は3つのテーブルを持っています。テンプレートに続くテーブルのすべての行を見つける方法は?

テーブルタグ

id tag_name  tag 
1 date   [0-9]+([\.:;\-\/ ]?(ЪЬЪЬ)?[0-9]+[\.:;\-\/ ]?(ЪЬЪЬ)?)+ 
2 text   (.*) 

テーブルメッセージ

id group_number msg         id_template 
1 2    some text 25.06.2016 some more text 0 

テーブルテンプレート{テキスト}は、任意の日付を置き換えることができ、MSGと{日付}の任意のテキストを置き換えることができ

id group_number tag_text 
1 2    some{text} {date} {text} 

msg。

この場合、ID 1のメッセージはID 1のテンプレートに従いますが、メッセージとテンプレートは多数あります。

したがって、template.tag_textの後に続くすべてのmessage.msgに対して、message.id_template template.idに挿入します。

SQLではやや

update message 
set message.id_template = template.id 
where message.msg like 'template.tag_text' 

ようになっているはずですが、私は{日付}と{テキスト}に対処する方法がわからない、この

some text 25.06.2016 some more text 

この

理由
some{text} {date} some more {text} 

は異なると見なされます。

ただSQLで可能ですか?

update message m join 
     template t 
     on m.msg regexp t.tag_text 
    set m.id_template = t.id; 

注:

+0

MySQLのREGEXTはバイトで動作します。キリル文字で「間違ったことをする」ことはまずありません。 –

答えて

0

あなたはjoinと右の比較演算子を使用する必要がこれは遅くなります(それは、ネストされたループを行う必要がありますので、参加します)。また、複数のテンプレートが一致する場合は、idのために任意に選択されます。

+0

regexpを正規表現に置き換える必要がありますか? –

+0

@EugeneCuz。 。 。いいえ、 'regexp'はMySQLの演算子です。 –

関連する問題