2014-05-15 39 views
0

我有一個mysql table叫做main,我想選擇所有在任何字段中包含字符串的行。選擇在任何字段中包含字符串大小寫的所有原始數據

並非所有的字段都是varchar。

我這樣做的現場硬件,但我希望能夠搜索所有的領域,如果可能不指定他們的名字,因爲現在有12個領域,他們可能會增加數量。

SELECT * FROM main WHERE hardware LIKE "%string%" 

編輯:

我會在PHP 做到這一點,basicly我想這樣做sometring這樣

SELECT * FROM main WHERE at_least_one_field LIKE "%string%" 
+1

如何以及爲什麼這樣做? 我想這個問題的最佳答案取決於你用什麼樣的工具來執行查詢。 –

+0

我會在PHP中這樣做,但如果可能的話,我希望接收已經過濾的數據。 – Ionut

+0

http://stackoverflow.com/questions/6226417/compare-value-with-all-the-fields-of-a-table-in-mysql – Ejaz

回答

1

誠如EJAY註釋中,全文搜索將是最好的方法。我沒有意識到,因爲5.6全文工作在InnoDB表格上。

如果您不能使用全文搜索,那麼以下內容適用於較小的數據集,但它不會很好地擴展。

可能不是最有效的方式,但創建一個將所有不同領域結合在一起的視圖又如何呢?

CREATE view searchTerms ... 
SELECT id, field1 as SearchValue FROM main 
UNION 
SELECT id, field2 from main 
... etc 

然後查看鏈接到主表

SELECT m.* 
FROM main m 
    LEFT JOIN searchTerms s ON m.id = s.id 
WHERE s.SearchValue like '%stringToSearch%'; 

這裏有一個SQL撥弄一個鏈接,demonstrates我展示什麼。

0

我認爲這可以用更簡單的方式完成。 我想我會用this solution

SELECT * FROM clients 
WHERE field1 LIKE '%search%' 
    OR field2 LIKE '%search%' 
    OR field3 LIKE '%search%' 
    OR field4 LIKE '%search%' 
    .... 
    OR fieldX LIKE '%search%' 
相關問題