我使用的是Mysql查询:
WHERE fname LIKE '%{$query}%' OR lname LIKE '%{$query}%' OR zipcode LIKE '%{$query}%' OR city LIKE '%{$query}%'假设我的数据库中有以下信息:
当我搜索‘纽约’时,我得到了预期的结果(比尔盖茨),但当我搜索“纽约比尔”时,我没有得到任何结果。
在多个列中搜索的正确查询是什么?
发布于 2013-08-29 09:58:27
当在语句中对列使用LIKE时,您是说将所有的"bill new york“与City "New York”进行比较,这将失败,因为"bill“一词是在查询中而不是在列中。
在这种情况下,您最好使用MySQL的全文搜索,如下所示;
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如果你能提供你的表格结构,我可以扩展答案。
发布于 2013-08-29 09:57:49
您所遇到的问题是,类似基本上只是=的大小写。
你可以用两种方法来做你想要做的事情,第一卫星是在卫星上爆炸你的$query,并对发现的每一件工作使用类似的文件,这很麻烦,我不建议你这么做。
更可取的选择是对()使用全文搜索匹配()--这要简单得多,而且代码http://dev.mysql.com/doc/refman/5.0/en/fulltext-natural-language.html <更干净--这是一个很好的起点
发布于 2013-08-29 09:59:06
您要么需要将查询解析成单独的单词,然后动态地构造一个查找WHERE子句,该子句分别搜索每个字段,并将它们放在一起进行ORing。
或
使用全文索引。
我建议采用后者。
https://stackoverflow.com/questions/18507622
复制相似问题