考虑下表 teammessages
:
15:10 | Peter | I'm off to the store, call my mobile phone if you need me.
15:11 | Susy | Have you seen the new scanner? It's lightning fast.
15:15 | Anne | We have an emergency here, John broke the tap! Please switch off the water supply!
15:15 | John | I did what?? :-D I'm in Vienna!
15:16 | Peter | I'm stuck in the elevator, help!
15:17 | Anne | I said WATER, not POWER supply!
当我想的时候 SELECT
紧急消息,包含像“帮助”或“紧急情况”这样的关键词,从混乱的自由文本中,我必须有一个“反向输入”功能,它不检查字段是否在给定的备选列表中( WHERE APPLECOLOR IN ('YELLOW', 'RED')
)但它会检查给定备选方案的值是否在字段中( WHERE freetext REVERSE_IN ('help', 'emergency')
).
我试过这样的方法 WHERE freetext LIKE ('%help%' OR '%emergency%')
,但这给了我空的结果。
澄清:我可以用 freetext LIKE ... OR freetext LIKE ... OR freetext LIKE ...
但时间很长。所以我只是想找一个像 IN
在“相反的情况”( APPLECOLOR = 'RED' OR APPLECOLOR = 'YELLOW'
<=> APPLECOLOR IN ('RED', 'YELLOW')
).
6条答案
按热度按时间dwbf0jvd1#
WHERE freetext LIKE ('%help%' OR '%emergency%')
不是这样工作的。应该是:
附加:来自类似功能的文档:
对于like,可以在模式中使用以下两个通配符:
%匹配任意数量的字符,甚至零个字符。
_只匹配一个字符。
kninwzqo2#
您应该尝试:
dddzy1tm3#
通过执行以下类似操作,您可以找到所有关键字为“紧急”的邮件:
你可以用
NOT LIKE
这种方式:enxuqcxy4#
你可能在寻找“帮助”和“紧急情况”这两个词。你不想找到
杰克,你的笑话没用。
你必须减去税金。希望这有帮助:-)
因此,请检查您的mysql版本是否支持正则表达式,您可以在其中查找单词:
rextester演示:http://rextester.com/ilropq12660
mrfwxfqh5#
原始查询的正确形式是:
但是,您也可以考虑使用
MATCH
. 为此,你需要有一个FULLTEXT
上的索引message
可以使用此命令添加的列:然后可以使用以下查询进行搜索:
这会给你更好的结果
LIKE
,也可以匹配“whelp”、“help”或“help”等词。在示例表中,此查询返回:这个查询还有一个优点,就是不需要长到多个
LIKE
smklgxw1f6#
我建议生成一个列。
答案涉及
LIKE
在这里会很慢,答案涉及全文搜索(freetext
)表达式告诉mysql索引列中的每个单词,而不仅仅是你关心的单词。您可以使用生成的列来生成一个简单的y/n或1/0结果,该结果仅适用于您关心的单词,这些单词只需要在插入/更新时计算完整的列数据。