Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于搜索所有字段的MYSQL查询?_Mysql - Fatal编程技术网

用于搜索所有字段的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上工作。