2013-08-24 34 views
11

我试图做一个简单的搜索栏,通过我的数据库搜索某些单词。不使用WHERE就可以使用LIKE属性?我希望它搜索关键字的所有列,而不仅仅是一个。目前我有这个:MySQL - 是否可以在表中的所有列上使用LIKE?

mysql_query("SELECT * FROM shoutbox WHERE name LIKE '%$search%' ") 

这显然只搜索名称与搜索输入。我试过这两个:

mysql_query("SELECT * FROM shoutbox LIKE '%$search%' ") 
mysql_query("SELECT * FROM shoutbox WHERE * LIKE '%$search%' ") 

并且都没有工作。这是可能的吗?还是有另一种方式去实现它?

回答

6

你可能想在MATCH()函数来查找以及如:

SELECT * FROM shoutbox 
WHERE MATCH(`name`, `foo`, `bar`) AGAINST ('$search') 

您还可以布尔模式添加到这个:

SELECT * FROM shoutbox 
WHERE MATCH(`name`, `foo`, `bar`) AGAINST ('$search') IN BOOLEAN MODE 

你也可以得到相关性分数并添加FULLTEXT键以加快查询速度。

+1

产生“无法找到匹配列列表的FULLTEXT索引” – Fanky

+1

链接到文档也可能有用:https://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html – Kalko

11

没有捷径。您需要分别指定每个列。

SELECT * FROM shoutbox 
    WHERE name LIKE '%$search%' 
     OR foo LIKE '%$search%' 
     OR bar LIKE '%$search%' 
     OR baz LIKE '%$search%' 
+2

我之前并不知道“OR”。这应该完美。我赞赏 – user2566387

+0

接受答案,如果它帮助你 – skv

+0

hey @skv,你能解释一下关于“match()”和“LIKE + OR”之间的性能比较吗? – Sangram

4

这将不会显示重复的行了。

SELECT * FROM shoutbox 
WHERE (name LIKE '%$search%' 
    OR foo LIKE '%$search%' 
    OR bar LIKE '%$search%' 
    OR baz LIKE '%$search%') 
相关问题