0

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

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

这是我的情况:

每个表都有以下列

id
name
flag
poststatus

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

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

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

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

谢谢你。

4

2 回答 2

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%'
于 2012-09-27T16:55:03.880 回答
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);

后状态 = '2';

于 2012-09-27T16:38:53.473 回答