0

単一のデータベースに多数のテーブルを作成することは非常に悪い考えです。私は今それを理解しています。だから私は新しい単一のテーブルを作成することによってこれを修正したいと思います。だから私はすべてのテーブルのすべての行を単一のテーブルにフェッチしたいと思います。

どこでも検索しましたが、解決策がないので、助けが必要です

これが私の状況です:

各テーブルには次の列があります

id
name
flag
poststatus

以下のクエリを実行して、2つのテーブルからデータを取得できます。

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

しかし、これは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 に答える