PHP / MySQL - 包含复数但不包括单数

时间:2011-10-03 15:40:41

标签: php mysql

我正在建立一个网站,要求包含多个单词,但不包括单词,还包括较长的短语,但不包括其中较短的短语。

例如:

  • 搜索“面包”应该返回包含“面包”的结果,而不是“面包”或“读取”。

  • 搜索“平装书”应该返回带有“平装书”的结果,而不是“平装书”或“书籍”。

我尝试的查询是:

SELECT * FROM table WHERE (field LIKE '%breads%') AND (field NOT LIKE '%bread%')

...虽然有“面包”和“面包”的记录,但显然没有结果。

我理解为什么这个查询失败了(我告诉它要包含和排除相同的字符串)但我想不出适用于代码的正确逻辑以使其工作。

3 个答案:

答案 0 :(得分:2)

您应该考虑使用FULL TEXT SEARCH

这将解决您的面包/阅读问题。

我认为在这里使用通配符是没用的。假设您使用的是'%read%',现在这也会返回breadbreads等,这就是我推荐Full Text Search

的原因

答案 1 :(得分:2)

搜索%breads%将永远不会返回breadread,因为's'是匹配所需的字符。所以只需删除和子句:

SELECT ... WHERE (field LIKE '%breads%')
SELECT ... WHERE (field LIKE '%paperback book%');

答案 2 :(得分:0)

使用MySQL,你可以使用REGEXP而不是像你可以更好地控制你的查询......

SELECT * FROM table WHERE field REGEXP '\s+read\s+'

这至少可以强制执行查询周围的单词边界,并且可以更好地控制匹配 - 但是性能下降会受到影响。