2010-09-26 128 views
8

像聽起來那麼愚蠢,是有沒有辦法做這樣的事情:搜索所有字段的MYSQL查詢?

select row_id from mytable where * like '%searched_text%'; 

由*這裏我指的是在表中「所有字段」,而不是我一個指定它們一個...

+0

您是否正在嘗試構建全文索引?使用apache lucene和apache solr可能會更好。 – 2014-01-15 14:56:11

回答

1

是的,它叫Full Text Search

您可以使用MySQL的內置全文搜索功能,或使用單獨的產品來爲您做文本索引,如Apache's Lucene(我個人最喜歡的)。

+0

umm - 你好巴勃羅 - 我如何使用它?這聽起來像我需要修改我的列? – siliconpi 2010-09-26 13:42:58

+0

全文不起作用,你仍然需要枚舉你搜索的所有字段。 – Wikeno 2010-09-26 13:48:44

+0

@matt_tm,你不需要修改你的列,你只需要在你想要的所有列上創建一個FULL TEXT索引搜索。這就像創建一個索引。 – 2010-09-26 14:57:03

4

這是一個解決方案,結合一些PHP來搜索特定表中的所有字段。

include("db_con.php"); 
//search all fields 
$searchphrase = "banan"; 
$table = "apa303"; 
$sql_search = "select * from ".$table." where "; 
$sql_search_fields = Array(); 
$sql = "SHOW COLUMNS FROM ".$table; 
$rs = mysql_query($sql); 
    while($r = mysql_fetch_array($rs)){ 
     $colum = $r[0]; 
     $sql_search_fields[] = $colum." like('%".$searchphrase."%')"; 
    } 

$sql_search .= implode(" OR ", $sql_search_fields); 
$rs2 = mysql_query($sql_search); 
$out = mysql_num_rows($rs2)."\n"; 
echo "Number of search hits in $table " . $out; 
+1

需要注意的是,在很可能的情況下,您將搜索短語更改爲用戶輸入(例如$ searchphrase = $ _GET ['query']),那麼您需要使用mysql_real_escape_string來防止SQL注入。 – Aron 2014-12-13 10:41:49

-2

他是一個完整的解決方案,,是上述方案的修改,這爲我工作,謝謝。

<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title></title> 
    </head> 
    <body> 
     <?php 
     include('config.php'); 
     $searchphrase = "adsa"; 
     $table = "tenders"; 
     $sql_search = "select * from " . $table . " where "; 
     $sql_search_fields = Array(); 
     $sql = "SHOW COLUMNS FROM " . $table; 
     $rs = mysql_query($sql); 
     while ($r = mysql_fetch_array($rs)) { 
      $colum = $r[0]; 
      $sql_search_fields[] = $colum . " like('%" . $searchphrase . "%')"; 
     } 
     $sql_search .= implode(" OR ", $sql_search_fields); 
     $rs2 = mysql_query($sql_search); 
     $out = mysql_num_rows($rs2) . "\n"; 
     echo "Number of search hits in $table " . $out."<br />"; 
     while ($results = mysql_fetch_array($rs2)){ 
      print $results[0]."<br />"; 
     } 
     ?> 
    </body> 
</html> 
0

我看起來像這樣在表中的所有字段中搜索。儘管我的桌子數據較少,所以我選擇了「Kilian Lindberg」的答案,並使用他的想法創建了PDO功能。在這個函數中,我們可以在參數中發送'搜索字符串'和'表名',它會返回我們可以按照我們的要求進一步使用的SQL字符串。認爲在大表中它可能會放慢這個過程。

function columnsTable($Search, $Table){ 
    include("PDO_conn_detail.php"); /* your PDO mysql connection file */ 
    $srchSQLstr = "SELECT * FROM $Table WHERE "; 
    $tableFields = Array(); 

    $colSQL = $conn->prepare("SHOW COLUMNS FROM $Table"); 
    $colSQL->execute(); 
    while ($result_colSQL = $colSQL->fetch(PDO::FETCH_ASSOC)){ 
      $tableFields[] = $result_colSQL[Field]." LIKE ('%".$Search."%')"; 
     } 

    $srchSQLstr .= implode(" OR ", $tableFields); 
    return $srchSQLstr; 
}