用于搜索所有字段的MYSQL查询?

时间:2010-09-26 13:08:12

标签: mysql

听起来很蠢,有没有办法做这样的事情:

select row_id from mytable where * like '%searched_text%';

通过*在这里我的意思是表中的“所有字段”,而不是我一个一个地指定它们......

7 个答案:

答案 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

Access MySQL data from SQL Server via a Linked Server

答案 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>