用于搜索所有字段的MYSQL查询?
尽管听起来很愚蠢,但有没有办法做到这一点:用于搜索所有字段的MYSQL查询?,mysql,Mysql,尽管听起来很愚蠢,但有没有办法做到这一点: select row_id from mytable where * like '%searched_text%'; 这里我指的是表中的“所有字段”,而不是我一个接一个地指定它们…是的,它被称为 您可以使用MySQL内置的全文搜索,或者使用单独的产品进行文本索引,例如(我的个人收藏)。一次查询是不可能的 但是,当您这样做时: DESCRIBE table_name; 您可以从中获取可以生成查询的字段名 可能有用。这里有一个与一些PHP相结合的解决方
select row_id from mytable where * like '%searched_text%';
这里我指的是表中的“所有字段”,而不是我一个接一个地指定它们…是的,它被称为
您可以使用MySQL内置的全文搜索,或者使用单独的产品进行文本索引,例如(我的个人收藏)。一次查询是不可能的 但是,当您这样做时:
DESCRIBE table_name;
您可以从中获取可以生成查询的字段名
可能有用。这里有一个与一些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;
他是一个完整的解决方案,是对上述解决方案的修改,它对我有效,谢谢
<!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;
}
像这样使用
select row_id from mytable where '%searched_text%' IN ('column1','column2','column3','column4','column5');
此解决方案使Ms Sql Server通过链接服务器成为可能
DECLARE @searchTxt VARCHAR(100) = 'searching text'
DECLARE curr CURSOR LOCAL FAST_FORWARD READ_ONLY FOR
select * from openquery (BITRIX, 'SELECT table_name, column_name FROM information_schema.columns where table_schema = ''bitrix_50'' and data_type = ''varchar'' and table_name not like ''b_mail%''')
DECLARE @tName VARCHAR(100), @cName VARCHAR(100), @sql NVARCHAR(4000), @cnt INT
OPEN curr
FETCH NEXT FROM curr INTO @tName, @cName
WHILE (@@FETCH_STATUS=0)
BEGIN
SET @sql = 'select @cnt=cnt from openquery (BITRIX, ''SELECT count(*) cnt FROM ' + @tName + ' WHERE ' + @cName + ' LIKE ''''%' + @searchTxt + '%'''''')'
BEGIN TRY
EXECUTE sp_executesql @sql, N'@cnt int OUTPUT', @cnt=@cnt OUTPUT
IF (@cnt>0)
PRINT @sql
END TRY
BEGIN CATCH
PRINT N'Error on: ' + @sql
END CATCH
FETCH NEXT FROM curr INTO @tName, @cName
END
CLOSE curr
DEALLOCATE curr
嗯-嗨,巴勃罗-我该如何使用它?听起来我需要修改我的列?全文没有帮助,你仍然需要枚举你搜索的所有字段。@matt_tm,你不需要修改你的列,你只需要为你要搜索的所有列创建全文索引。这就像创建索引一样。@Wikeno:true。但我认为他在试图避免一个巨大的where子句,由OR条件连接在一起。。。我可能是错的…这个问题正是我的问题。。。谢谢Wikenoar你在尝试建立全文索引吗?使用apache lucene和apache solr可能会更幸运。应该注意的是,如果您将搜索短语更改为用户输入(例如$searchphrase=$\u GET['query']),那么您需要使用mysql\u real\u escape\u字符串来防止SQL注入。将其转换为SQL/PSM:-)而不是在mysql上工作。