我正在使用这个 Mysql 查询:
WHERE fname LIKE '%{$query}%' OR lname LIKE '%{$query}%' OR zipcode LIKE '%{$query}%' OR city LIKE '%{$query}%'
假设我的数据库中有以下信息:
- 名字:比尔
- 姓名:盖茨
- 邮编:12345 AA
- 城市:纽约
当我搜索“纽约”时,我得到了预期的结果(比尔盖茨),但是当我搜索“比尔纽约”时,我没有得到任何结果。
跨多列搜索的正确查询是什么?
在您的语句中对列使用 LIKE 时,您是说将所有“bill new york”与“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
如果您可以提供表结构,我可以扩展答案。
您遇到的问题是 LIKE 基本上只是 = 的不区分大小写版本
有两种方法可以去做你想做的事情,第一个方法是在 saces 上爆炸你的 r $query 并为每个找到的工作使用一系列 LIKE,这很混乱,我不建议这样做。
第二个更可取的选择是使用全文搜索 MATCH() AGAINST() 它更简单,代码更简洁 http://dev.mysql.com/doc/refman/5.0/en/fulltext-natural- language.html <- 这是一个很好的起点
您要么需要将查询解析为单独的单词并动态构造一个 looooong WHERE 子句,该子句分别搜索每个字段的每个单词,或者将它们组合在一起。
或者
您使用 FULLTEXT 索引。
我建议后者。