MySQL Apostrophe-如何使用MATCH / AGAINST转义并返回正确的结果

时间:2011-10-30 21:13:36

标签: php mysql sql database

我有一个像这样的表:

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

我不确定为什么我会“The Threev Bears”而不是“The Three Bears”? “三”是一个被忽视的词吗?

另外,为什么我会“Twenty / Twenty”“不要忘记”?这是我想要的唯一结果。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

你在这里有几个问题,所以让我试着解决它们。

首先,你是对的three确实是一个被忽视的词。默认情况下,MySQL具有未编入索引的ignored or "stop" words列表。你可以调整它。我们的想法是避免使用非常常见的单词来混淆您的索引,这些单词将返回大部分结果。

要在PHP中转义字符,您应该使用参数化查询,或者至少使用msql_real_escape_string。 Here's a great SO post on the subject

最后,您获得Twenty/Twenty而不是Don't forget的原因是因为Don't也是一个停用词。 TwentyTwenty匹配t*我相信。