作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个类似这样的表:
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
我不确定为什么我会得到“三只熊”,而不是“三只熊”? “三”是一个被忽视的词吗?
另外,为什么我得到的是“二十/二十”,而不是“不要忘记”?这是我想要的唯一结果。
感谢您的帮助!
最佳答案
您在这里有几个问题,所以让我尝试解决这些问题。
首先,你是对的,三
确实是一个被忽视的词。默认情况下,MySQL 有一个列表 ignored or "stop" words哪些没有索引。你可以调整这个。这样做的目的是避免索引中出现非常常见的单词,这些单词将返回大部分结果。
要转义 PHP 中的字符,您确实应该使用参数化查询,或者至少使用 msql_real_escape_string。 Here's a great SO post on the subject
最后,您得到 Twenty/Twenty
而不是 Don't忘记
的原因是因为 Don't
也是停用词。我相信 TwentyTwenty 与 t*
相匹配。
关于php - MySQL 撇号-如何使用 MATCH/AGAINST 转义并返回正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7947854/
我是一名优秀的程序员,十分优秀!