搜索多个列

时间:2013-08-29 09:50:46

标签: php mysql sql

我正在使用这个Mysql查询:

WHERE fname LIKE '%{$query}%' OR lname LIKE '%{$query}%' OR zipcode LIKE '%{$query}%' OR city LIKE '%{$query}%'

假设我的数据库中有以下信息:

  • 名字:Bill
  • 姓氏:盖茨
  • 邮编:12345 AA
  • 城市:纽约

当我搜索“纽约”时,我得到了预期的结果(账单门),但是当我搜索“bill new york”时,我没有得到任何结果。

跨多个列搜索的正确查询是什么?

3 个答案:

答案 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索引。

我会建议后者。