我想从一个MySQL数据库的所有表的所有字段搜索一个给定的字符串,可能使用语法为:

SELECT * FROM * WHERE * LIKE '%stuff%'

有可能做这样的事情吗?


当前回答

我已经使用HeidiSQL做到了这一点。 它不容易找到,但按Ctrl+Shift+F它会显示“表格工具”对话框。然后选择要搜索的内容(全库到单表),输入“要查找的文本”值,点击“查找”。我发现它惊人的快(不到一分钟870MiB db)

其他回答

虽然这个问题已经很老了,但如果你使用的是mysql workbench 6.3,你可以这样做。(很可能它也适用于其他版本)

右键点击你的模式和“搜索表数据”,输入你的值,然后点击“开始搜索”。这是它。

这是我知道的最简单的方法。 在PHPMyAdmin中选择你的DB,然后转到“搜索”选项卡,写下你想要找到的内容以及你要搜索的位置。如果要从所有表中搜索单词,则选择所有表。然后“开始”,看看结果。

PHP函数:

function searchAllDB($search){
    global $mysqli;
    
    $out = Array();
    
    $sql = "show tables";
    $rs = $mysqli->query($sql);
    if($rs->num_rows > 0){
        while($r = $rs->fetch_array()){
            $table = $r[0];
            $sql_search = "select * from `".$table."` where ";
            $sql_search_fields = Array();
            $sql2 = "SHOW COLUMNS FROM `".$table."`";
            $rs2 = $mysqli->query($sql2);
            if($rs2->num_rows > 0){
                while($r2 = $rs2->fetch_array()){
                    $column = $r2[0];
                    $sql_search_fields[] = "`".$column."` like('%".$mysqli->real_escape_string($search)."%')";
                }
                $rs2->close();
            }
            $sql_search .= implode(" OR ", $sql_search_fields);
            $rs3 = $mysqli->query($sql_search);
            $out[$table] = $rs3->num_rows."\n";
            if($rs3->num_rows > 0){
                $rs3->close();
            }
        }
        $rs->close();
    }
    
    return $out;
}

print_r(searchAllDB("search string"));

我已经使用HeidiSQL做到了这一点。 它不容易找到,但按Ctrl+Shift+F它会显示“表格工具”对话框。然后选择要搜索的内容(全库到单表),输入“要查找的文本”值,点击“查找”。我发现它惊人的快(不到一分钟870MiB db)

我使用Union将查询串在一起。不知道这是不是最有效的方法,但确实有效。

SELECT * FROM table1 WHERE name LIKE '%Bob%' Union
SELCET * FROM table2 WHERE name LIKE '%Bob%';