我有以下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结果?
答案 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列创建。