我正在使用这个Mysql查询:
WHERE fname LIKE '%{$query}%' OR lname LIKE '%{$query}%' OR zipcode LIKE '%{$query}%' OR city LIKE '%{$query}%'
假设我的数据库中有以下信息:
当我搜索“纽约”时,我得到了预期的结果(账单门),但是当我搜索“bill new york”时,我没有得到任何结果。
跨多个列搜索的正确查询是什么?
答案 0 :(得分:3)
在你对一个列的陈述中使用LIKE时,你要说的是将“bill new york”与City“New York”进行比较,这将失败,因为短语“bill”在查询中,而不在列中。
在这种情况下,你最好使用MySQL的FULLTEXT搜索,如下所示;
SELECT FieldName,
MATCH (FieldName) AGAINST (+"Bill New York" IN BOOLEAN MODE) AS Relevance
FROM MyTable
WHERE MATCH (FieldName) AGAINST (+"Bill New York" IN BOOLEAN MODE)
HAVING Relevance > 0
ORDER BY Relevance DESC
如果你能提供你的桌子结构,我可以扩展答案。
答案 1 :(得分:0)
你遇到的问题是LIKE基本上只是=
的情况你有两种方法可以解决你想要做的事情,第一种方法就是在saces上爆炸你的r $查询,并为每个找到的工作使用LIKE的seires,这很乱,我不建议。
第二个更优选的选项是使用全文搜索MATCH()AGAINST()它更简单,使代码更清晰 http://dev.mysql.com/doc/refman/5.0/en/fulltext-natural-language.html< - 这是一个开始的好地方
答案 2 :(得分:0)
您需要将查询解析为单独的单词并动态构造一个looooong WHERE子句,该子句分别搜索每个单词的每个字段,并将它们组合在一起。
OR
您使用FULLTEXT索引。
我会建议后者。