MySQL - 是否可以在表中的所有列上使用LIKE?

时间:2013-08-24 06:47:20

标签: mysql where sql-like

我正在尝试创建一个简单的搜索栏,在我的数据库中搜索某些单词。可以在不使用WHERE的情况下使用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%' ")

并且都没有奏效。这是可能的还是有其他方法可以解决这个问题?

4 个答案:

答案 0 :(得分:15)

没有捷径。您需要单独指定每个列。

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

答案 1 :(得分: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键以加快查询速度。

答案 2 :(得分:4)

有一条捷径! ;)

SELECT * FROM shoutbox 
WHERE CONCAT(name, foo, bar, baz) LIKE '%$search%' 

答案 3 :(得分:3)

这将不再显示重复的行。

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