MySQL名称LIKE'%#attributes.q#%'---不返回完全匹配的结果?

时间:2010-03-14 05:56:59

标签: mysql select where-clause sql-like

我有以下MySQL查询:

SELECT  *
FROM    customer
WHERE   
fName LIKE '%#attributes.q#%' AND deleted = 'N'
OR 
lName LIKE '%#attributes.q#%' AND deleted = 'N'

这适用于猜测,但如果你提供完全匹配:“比尔克林顿”fname = bill lname =克林顿到上面的查询得到0结果? bill clint给出了结果。

如何更新此查询以说找到LIKE结果和EQUAL TO结果?

2 个答案:

答案 0 :(得分:2)

很难从你的问题中得知,但我猜你的客户表看起来像是:

id    fName    lName      deleted
---------------------------------
1     John     Doe        N
2     Bill     Clinton    N
3     Fred     Smith      N
4     George   Bush       Y

您的查询,正如您在问题中所说的那样,将永远不会有效,因为它看起来像这样:

SELECT *
FROM customer
WHERE fname LIKE '%Bill Clinton%' AND deleted = 'N'
OR
  lName LIKE '%Bill Clinton%' AND deleted = 'N'

表中没有fName OR lName字段包含“Bill Clinton”

的记录

您必须按摩#attributes.q#文本,以便生成如下内容:

SELECT *
FROM customer
WHERE ((fName LIKE '%Bill%') OR (fName LIKE '%Clinton%')) AND deleted = 'N'
OR
   ((lName LIKE '%Bill%') etc.....

LIKE比较非常类似于在文件名中使用通配符。他们不会为你分割一个文本块,但会告诉你一块文本是否逐字存在于另一块文本中。

我认为您需要的是FULLTEXT search,它会考虑查询字符串中的单个单词并返回结果。当然,FULLTEXT仅适用于MyISAM表类型,因此如果您使用InnoDB或其他类型,那么您运气不佳。

答案 1 :(得分:0)

仅供参考-全文索引只能与InnoDB或MyISAM表一起使用,并且只能为CHAR,VARCHAR或TEXT列创建。