2 つの異なるソースからの 2 つの別個のデータベースがありますが、データの ttype と行は同じですが、両方のデータを配列に返して、両方を 1 つのソースとして操作できますか?
2 に答える
2 つのデータベースが同じサーバーにあり、両方のテーブルの構造が同じである場合は、UNIONを使用できます。
SELECT *
FROM `database1`.`table1`
WHERE `condition1`
UNION
SELECT *
FROM `database2`.`table2`
WHERE `condition2`
database1、database2、table1、table2、condition1、および condition2 を実際の値に置き換えます。
(上記のbiziclopとbfavarettoのコメントへのクレジット-しかし、半分の答えから他の人を救うための答えとして投稿してください。)
概要:フェデレーションテーブル(http://dev.mysql.com/doc/refman/5.0/en/federated-storage-engine.html)とUINION(またはJOIN)を使用します。
詳細:
「プライマリ」(ローカル)MySQLテーブルとセカンダリ「リモート」データベースがあると仮定します。「プライマリ」MySQLバイナリで、「フェデレーションテーブル」用にコンパイルします。これにより、リモートサーバー上のテーブルにローカルであるかのようにアクセスできます。フェデレーションテーブルはデフォルトでは有効になっていません。
次に、リモートデータベースのテーブルとまったく同じ構造でプライマリデータベースにテーブルを作成しますが、テーブルの作成手順の最後に「CONNECTION」文字列を追加します。これにより、フェデレーションテーブルとして設定され、実際にリモートサーバーからデータが取得されます。
次に、プライマリテーブルとフェデレーションテーブルの間のUNION(または必要に応じてJOINS)を使用してプライマリサーバーにクエリを実行すると、プライマリサーバーのみからのものであるかのように1セットの結果が返されます。リモートからもデータを取得します。
マニュアルに複数のクエリの実行方法に関する警告があり、あまり効率的ではないことに注意してください(たとえば、すべての呼び出しの前に「SHOW TABLES」で始まり、必要以上の行を返す、ローカル一時テーブルを作成するなど)。