如何查找表格中跟随模板的所有行?

时间:2016-11-03 14:22:03

标签: mysql sql regex

我有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

表格模板

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

其中{text}可以替换msg中的任何文本,{date}可以替换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'

但我不知道如何处理{date}和{text},因为这个

some text 25.06.2016 some more text  

和这个

some{text} {date} some more {text}

会被视为不同。

是否可以只使用sql?

1 个答案:

答案 0 :(得分:0)

您需要join并使用正确的比较运算符:

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

注意:这将很慢(因为它必须进行嵌套循环连接)。此外,如果多个模板匹配,则可以任意选择一个模板。

相关问题