从单个查询中获取多个表的结果

时间:2014-08-14 14:29:52

标签: php mysql

我有一个主要问题我有18个不同的表的mysql数据库,我想通过使用全文搜索在所有这些表中搜索如何做到这一点而不影响性能,也没有任何框架只有bt使用PHP和MySQL感谢预先

3 个答案:

答案 0 :(得分:1)

这是不可能的,MySQL无法跨多个表格制作全文(或任何类型的搜索)索引。

如果表格完全不同,您将无法执行任何形式的JOINS,因此您无法对18个表格执行1次全文搜索。

答案 1 :(得分:0)

$tables = array('table1','table2','table3','table4','table5');
$return = array();
foreach( $tables as $table) ){
    $query = "SELECT * FROM ".$table." WHERE field LIKE ?";
    $pdo = new PDO($connection_params); // Your PDO connection
    $stm = $pdo->prepare($query); // Prepare query
    $stm->execute(array('%'.$search_string.'%')); // Look for where field LIKE $search_string
    while($result = $stm->fetch(PDO::FETCH_OBJ) ){
        $return[$table][] = $result;
    }
}

如果在每个表中都有不同的字段,也可以这样做。

$tables = array('table1'=>'field1','table2'=>'field2','table3'=>'field3','table4'=>'field4','table5'=>'field5');
$return = array();
foreach( $tables as $table => $field) ){
    $query = "SELECT * FROM ".$table." WHERE ".$field." LIKE ?";
    $pdo = new PDO($connection_params); // Your PDO connection
    $stm = $pdo->prepare($query); // Prepare query
    $stm->execute(array('%'.$search_string.'%')); // Look for where field LIKE $search_string
    while($result = $stm->fetch(PDO::FETCH_OBJ) ){
        $return[$table][] = $result;
    }
}

你会得到一个类似这样的数组:

array(
    'table1' => array(
        array(
            'field' => 'val',
            'field1'=> 'val',
            'field2'=> 'val
        ),
        array(
            'field' => 'val',
            'field1'=> 'val',
            'field2'=> 'val
        )
    ),
    'table2' => array(
        array(
            'field' => 'val',
            'field1'=> 'val',
            'field2'=> 'val
        ),
        array(
            'field' => 'val',
            'field1'=> 'val',
            'field2'=> 'val
        )
    ) ........ all tables and all rows with field LIKE %yoursearchvalue%

答案 2 :(得分:0)

我认为你不能创建一个查询来搜索所有18个表。

你应该在mySQL中创建一个存储过程来做任何你想做的事情 - 分别搜索每个表,将结果放到临时表中,然后返回这会产生你喜欢的任何格式。然后从PHP代码中调用该存储过程。