像聽起來那麼愚蠢,是有沒有辦法做這樣的事情:搜索所有字段的MYSQL查詢?
select row_id from mytable where * like '%searched_text%';
由*這裏我指的是在表中「所有字段」,而不是我一個指定它們一個...
像聽起來那麼愚蠢,是有沒有辦法做這樣的事情:搜索所有字段的MYSQL查詢?
select row_id from mytable where * like '%searched_text%';
由*這裏我指的是在表中「所有字段」,而不是我一個指定它們一個...
一個查詢是不可能的。
然而,當你這樣做:
DESCRIBE table_name;
你,你可以生成從查詢的字段名。
Search in all fields from every table of a MySQL database可能有用。
鏈接的問題正是我的問題是...謝謝wikeno – siliconpi 2010-09-26 14:19:10
是的,它叫Full Text Search。
您可以使用MySQL的內置全文搜索功能,或使用單獨的產品來爲您做文本索引,如Apache's Lucene(我個人最喜歡的)。
這是一個解決方案,結合一些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;
需要注意的是,在很可能的情況下,您將搜索短語更改爲用戶輸入(例如$ searchphrase = $ _GET ['query']),那麼您需要使用mysql_real_escape_string來防止SQL注入。 – Aron 2014-12-13 10:41:49
他是一個完整的解決方案,,是上述方案的修改,這爲我工作,謝謝。
<!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>
我看起來像這樣在表中的所有字段中搜索。儘管我的桌子數據較少,所以我選擇了「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;
}
您是否正在嘗試構建全文索引?使用apache lucene和apache solr可能會更好。 – 2014-01-15 14:56:11