从具有相同列名和相同数据结构的所有表中获取数据PHP MySql

时间:2018-01-08 15:14:13

标签: php mysql

您好我有一个包含4000个表的MySql数据库。所有表都具有相同的数据结构。我想从一列中检索数据" name"这是在所有表中。我想列出所有数据。

我搜索了谷歌,堆栈溢出和更多资源。但是,如果没有加入或结合,我没有找到任何具体的答案。因为我不想在查询中写出4000个名字。有没有一般的查询来快速做到这一点。我认为使用信息架构表获取数据是可能的,但我不知道如何。

我知道如何选择表格:

SELECT DISTINCT TABLE_NAME 
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE COLUMN_NAME IN ('Product')
        AND TABLE_SCHEMA='YourDatabase';

但我不知道查询从中获取数据。 谢谢。

1 个答案:

答案 0 :(得分:0)

你有php标签。所以我认为你可以轻松地在php中获取数据。

try {
    $dbh = new PDO('mysql:host=localhost;dbname=db', 'user', 'password');
    //Get all table name
    $sth = $dbh->query("SELECT DISTINCT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME IN ('name') AND TABLE_SCHEMA='ai'");
    // build your query string 
    $query = ' ';
    foreach ($sth->fetchAll() as $table) {
        $query .= "SELECT DISTINCT name from $table[0]  UNION ";
    }
    $queryWithoutLastWord = preg_replace('/\W\w+\s*(\W*)$/', '$1', $query);
    // execute your final query 
    $sth1 = $dbh->query($queryWithoutLastWord);
    // Now build your expected array
    $names = [];
    foreach ($sth1->fetchAll() as $name) {
        $names[] =  $name['name'];
    }
    print_r($names);
    $dbh = null;
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}