2012-08-13 64 views
19

我想在mySQL中搜索整個表格作爲字符串。在mySQL中搜索整個表格作爲字符串

我想搜索表的所有字段和所有主題,返回包含指定文本的每個完整條目。

我不知道如何輕鬆地搜索多個領域;這裏是細節:

該表是「客戶」。它有大約30個字段和800個條目,在瀏覽器中一次顯示太多。我想搜索的域名(即「瑪麗」),但它可能是在shipping_name fieldbilling_name fieldemail場等

我想搜索所有字段包含任何條目字符串「Mary」。這就是我認爲應該工作,但不會:

SELECT * FROM `clients` IN 'Mary' 

回答

18

嘗試是這樣的:

Select * from clients where Concat(field1, '', field2, '', fieldn) like "%Mary%" 

您可能希望看到SQL文檔關於字符串操作符和正則表達式的更多信息。

編輯:可能有一些問題,NULL字段,所以以防萬一,你可能想使用IFNULL(field_i, ''),而不是僅僅field_i

區分大小寫:您可以使用不區分大小寫的排序規則或類似

... Where lower(concat(...)) like lower("%Mary%") 

只是搜索所有字段:我相信沒有辦法做一個SQL查詢,將搜索所有字段,而不顯式聲明字段進行搜索。原因是有理論的rel國家數據庫和操縱關係數據的嚴格規則(像關係代數或科代數;這些就是SQL所來自的),理論不允許諸如「只搜索所有領域」之類的東西。當然,實際行爲取決於供應商的具體實現。但在一般情況下,這是不可能的。爲了確保,請檢查select操作符語法(where部分,要成爲presice)。

+2

我真的很想找到一種方法,不必輸入表格中的每個字段。我想搜索所有字段。我會認爲這種簡單的事情是可能的。此外,我意識到,當我輸入小寫「瑪麗」,它不會找到「瑪麗」。它如何使它不區分大小寫,並搜索所有字段? – VoltzRoad 2012-08-13 20:03:25

+0

我們可以連接(*)嗎? – Waqas 2014-01-09 03:16:42

+2

空單引號是什麼?謝謝 – KDawg 2014-11-23 00:01:10

12

找出所有可能與你的搜索字段,然後使用類似的查詢:

SELECT * FROM clients 
WHERE field1 LIKE '%Mary%' 
    OR field2 LIKE '%Mary%' 
    OR field3 LIKE '%Mary%' 
    OR field4 LIKE '%Mary%' 
    .... 
    (do that for each field you want to check) 

使用的LIKE '%Mary%'代替= 'Mary'將查找字段包含someCaracters +「瑪麗」 + someCaracters。

+0

這裏的問題是,我必須在一次搜索查詢中鍵入單詞「瑪麗」45次。然後,我打算處理我名單上的下一位客戶......通常每天10-20!我試圖做的就是拉起客戶記錄。它不能超過15秒 – VoltzRoad 2012-08-13 20:06:03

+4

寫一個腳本,並定義一個@VARIABLE設置該名稱,你會寫一次,然後只需要修改該變量。 – 2012-08-13 20:14:40

+0

如果您將搜索條件直接放入您的SQL,然後你做錯了。 就像弗朗西斯P說的那樣。 – nickdnk 2015-06-08 11:51:41

3

基於PHP的搜索整個表的解決方案!搜索字符串是$字符串。這是通用的,如果你使用的崇高,你可以很容易地產生與多行選擇和Emmet結合使用Text Pastry線的數百或數千將與所有的工作表與任意數量的字段

$sql="SELECT * from client_wireless"; 
$sql_query=mysql_query($sql); 
$logicStr="WHERE "; 
$count=mysql_num_fields($sql_query); 
for($i=0 ; $i < mysql_num_fields($sql_query) ; $i++){ 
if($i == ($count-1)) 
$logicStr=$logicStr."".mysql_field_name($sql_query,$i)." LIKE '%".$string."%' "; 
else 
$logicStr=$logicStr."".mysql_field_name($sql_query,$i)." LIKE '%".$string."%' OR "; 
} 
// start the search in all the fields and when a match is found, go on printing it . 
$sql="SELECT * from client_wireless ".$logicStr; 
//echo $sql; 
$query=mysql_query($sql); 
+1

這是所有上述答案中的最佳答案 – 2016-09-07 06:53:50

0

的。

所以在我的情況下,我將文檔類型設置爲html,然後鍵入div*249,點擊選項卡,Emmet創建249個空白div。然後使用多個選擇,我在每個選項中鍵入col_id_,並觸發Text Pastry插入增量ID號。然後再次選擇多個選項,您可以刪除div標記並將其替換爲MySQL語法。

3

除了pattern matching與'喜歡'關鍵字。您還可以使用fulltext功能執行搜索 ;

SELECT * FROM clients WHERE MATCH (shipping_name, billing_name, email) AGAINST ('mary') 
2

如果你只是尋找一些文字,不需要用於編程的目的,你可以install HeidiSQL免費(我使用v9.2.0.4947)的結果集。

右鍵單擊任何數據庫或表並選擇「在服務器上查找文本」。

所有的比賽都顯示在每張桌子的單獨標籤 - 非常好。

令人恐懼的有用和節省了我的時間。忘記與漫長的查詢搞亂!

+0

哇,這很好。我已經使用Heidi並且不知道這個功能。 – ds00424 2017-11-14 21:55:41

0

的具體要求下面將搜索工作:

select * form table_name where (column_name1='%var1%' or column_name2='var2' or column_name='%var3%') and column_name='var'; 
,如果你想查詢從數據庫中檢索數據,這將很好地工作