从mysql中的所有表(大约5000个表)中选择特定数据

时间:2012-09-27 16:34:26

标签: mysql

在单个数据库中创建大量表是非常糟糕的。我现在明白了。 所以我想通过创建新的单个表来解决这个问题。所以我想将所有表的所有行都提取到单个表中。

我到处搜索但没有解决方案,所以需要帮助

这是我的情况:

每个表都有以下列

id
name
flag
poststatus

我可以在查询下面运行以从两个表中获取数据:

SELECT * FROM table1 WHERE poststatus = '2' UNION SELECT * FROM table2 WHERE poststatus = '2';

但这仅适用于两个表,我必须为近5000个表运行查询。

有没有更好的方法来获取单个查询或任何其他想法中的所有数据..

谢谢。

2 个答案:

答案 0 :(得分:0)

如果您手头有PHP(就像标签建议的那样),您可以创建一个小脚本,为您创建所有5000个SELECT语句:

for($i=1;$i<=5000;$i++)
    $sql.="INSERT INTO combined (name, flag, poststatus) SELECT name, flag, poststatus FROM table".$i." WHERE poststatus=2\n";
file_put_contents('combine.sql', $sql);

poststatus ='2';

答案 1 :(得分:0)

执行替换架构和like表达式。

set group_concat_max_len = 1048576;
select 
    concat('select * from ',
    group_concat(table_name separator ' where poststatus = ''2'' union select * from ')
    ) as query
from information_schema.tables
where table_schema = 'database_name' and table_name like 'table%'