我应该在MySQL中使用哪种方法将两个或多个字符串与一列匹配?
我有一个列someProps
,其中包含诸如string
,apple
和orange
之类的关键字。我需要使用正则表达式搜索包含lemon
和apple
的行,该命令具有以下内容:
orange
上面的命令将违反规则,如果带有水果where string regexp '(apple|orange)' and fruit = 1
的行只有1
,则不应将其包括在结果中,因为水果apple
没有另一行包含1
。
答案 0 :(得分:0)
如果您想在string
同时(且仅当)同时包含“ apple”和“ orange”的情况下获得成功,那么最好的方法是让FULLTEXT(string)
WHERE MATCH(string) AGAINST("+apple +orange" IN BOOLEAN MODE)
这也将匹配“ ORANGE彩色苹果”和其他一些变体。全文有一些警告,例如仅处理“单词”而不处理简短的单词。但是,如果这些限制都可以,那么它将比LIKE
或REGEXP
快得多。
如果无法使用Fulltext,则最好使用以下方法:
WHERE string LIKE '%apple%'
AND string LIKE '%orange%'
或者可以通过REGEXP
来完成:
WHERE string REGEXP '(apple.*orange)|(orange.*apple)'
如果您需要遵守单词边界和/或允许使用复数形式,请将其添加到您的规范中;这些建议的解决方案可能需要更改。例如,将.*
更改为.+
会拒绝“ appleorange”,同时仍然允许“ apple / orange”。