2013-08-24 33 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%') 
相關問題