听起来很蠢,有没有办法做这样的事情:
select row_id from mytable where * like '%searched_text%';
通过*在这里我的意思是表中的“所有字段”,而不是我一个一个地指定它们......
答案 0 :(得分:7)
一个查询无法实现。
但是当你这样做时:
DESCRIBE table_name;
您将获得可以从中生成查询的字段名称。
Search in all fields from every table of a MySQL database可能有用。
答案 1 :(得分: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;
答案 2 :(得分:2)
是的,它被称为Full Text Search。
您可以使用MySQL的内置全文搜索,或使用单独的产品进行文本索引,例如Apache's Lucene(我个人最喜欢的)。
答案 3 :(得分: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;
}
答案 4 :(得分:0)
像这样使用
select row_id from mytable where '%searched_text%' IN ('column1','column2','column3','column4','column5');
答案 5 :(得分:-1)
此解决方案使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
答案 6 :(得分:-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>