0

我是发展中地区的新手。对于我的产品,我需要处理近 100 个表。我觉得在数据库中找到一个可用的单词有风险。是否有任何查询可用于搜索数据库中任何表中可用的单词。如果可能,结果会给出表名。

谢谢...

4

3 回答 3

1

mysql中有一个FULL TEXT搜索选项。但它一次只能在一个表上工作。

要搜索多个表,您需要编写一些动态查询,或者非规范化

于 2012-07-10T12:22:44.750 回答
0

如果你有 phpMyAdmin 是可能的。选择您的数据库,然后选择“搜索”选项卡。您可以选择一个或多个表进行搜索。如果您将字段名称留空,它将在任何字段中搜索。比您可以按表格查看结果。(注:我在 phpMyAdmin v3.2 中测试过)

于 2012-07-10T12:26:44.947 回答
0

对于独立解决方案,我建议使用此功能:

<?php
function search_all_databases($search_token){
    $db = array(
          'host'     => 'localhost'
         ,'user'     => 'root'
         ,'pass'     => ''
         ,'database' => 'buns'
         ,'prefix'   => ''
         ,'type'     => 'mysqli'
    );

    $mysqli = new mysqli($db['host'], $db['user'], $db['pass'], $db['database']);

    $output = "<table><thead><tr><th> Database Name </th><th> Occurence </th></tr></thead>";

    $sql = "show tables";
    $ret = $mysqli->query($sql);

    if( 0 < $ret->num_rows ){
        $output.= '<tbody>';

        while( $row = $ret->fetch_array() ){
            $output.= '<tr>';
            $sql_search_fields = Array();

            $table  = $row[0];
            $output.= '<td>'.$table.'</td>';

            $sql2 = "SHOW COLUMNS FROM ".$table;
            $ret2 = $mysqli->query($sql2);
            if( 0 < $ret2->num_rows ){
                while( $row2 = $ret2->fetch_array() ){
                    $colum = $row2[0];
                    $sql_search_fields[] = "`".$colum."` like('%".$search_token."%')";
                }

                $ret2->close();
            }

            if( 0 < count( $sql_search_fields ) ){
                $search = "select * from ".$table." where ";
                $search.= implode(" OR ", $sql_search_fields );

                $rs3 = $mysqli->query($search);
                $output.= '<td>'.$rs3->num_rows.'</td>';
            }else{
                $output.= '<td>0</td>';
            }

            if( 0 < $rs3->num_rows ){
                $rs3->close();
            }

            $output.= '</tr>';
        }

        $output.= '</tbody>';
        $ret->close();
    }

    return $output;
}

echo search_all_databases('a');

这个函数依赖于mysqli,你可以把它改成另外一个数据库方法,比如mysql。

这也将输出一个包含结果的表格。如果您想在另一个位置使用结果,我建议将所有结果放在一个数组中。

于 2012-07-11T10:15:05.627 回答