[英]MySQL Apostrophe- How to escape and return correct results with MATCH/AGAINST
我有这样的表:
TABLE BOOKS
ID TITLE SUBTITLE
------------------------------------
1 Don't Forget
2 Twenty/Twenty How To Subtitle
3 Red Riding Hood Another Subtitle
4 The Three Bears
5 The Threev Bears
MySQL是:
SELECT * FROM books WHERE MATCH (titl, subt) AGAINST ('+don\'t*' IN BOOLEAN MODE)
以下查询返回给我(在phpMyAdmin中,我仍然不确定如何在PHP中转义撇号):
ID TITLE
-------------------------------
1 Twenty/Twenty
2 The Threev Bears
我不确定为什么要得到“三只熊”而不是“三只熊”吗? “三个”是一个被忽视的词吗?
另外,为什么我会得到“二十/二十”而不是“别忘了” ? 那是我唯一想要的结果。
谢谢您的帮助!
您在这里有几个问题,所以让我尝试解决。
首先,你是正确的three
确实是一个被忽视的词。 默认情况下,MySQL具有未索引的忽略或“停止”单词的列表。 您可以对此进行调整。 这样做的目的是避免用非常常见的单词使索引混乱,以免返回很大一部分结果。
要在PHP中转义字符,您实际上应该使用参数化查询,或者至少使用msql_real_escape_string。 这是一篇关于该主题的出色文章
最后,您得到Twenty/Twenty
而不是Don't forget
的原因是因为“ Don't
也是一个停用词。 TwentyTwenty在我相信的t*
上是匹配的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.