像听起来那么愚蠢,是有没有办法做这样的事情:搜索所有字段的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