3

3つのデータベースがあり、それぞれのテーブルを1つのクエリに結合する必要があります。どうすればよいですか?

これは私のつながりです:

try {
    $con_options = array(
        PDO::ATTR_EMULATE_PREPARES => false,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,  // _SILENT (pub) || _WARNING || _EXCEPTION  (dev)
    );

    $con_1 = new PDO('mysql:host=localhost; dbname=database_1', 'user_1', 'pass_1', $con_options);
    $con_2 = new PDO('mysql:host=localhost; dbname=database_2', 'user_2', 'pass_2', $con_options);
    $con_3 = new PDO('mysql:host=localhost; dbname=database_3', 'user_3', 'pass_3', $con_options);

} catch (PDOException $err) { 
    //  catch, record/log and do stuff with errors
}

データベースごとに一意のパスワードを持つ3人の異なるユーザーがいます。1つのデータベースには、facebook-appsおよびその他のiframeアプリケーションのアプリケーションデータが格納されます。もう1つは、製品、注文、顧客などのすべてのWebショップデータを保持し、3つ目はサイトの構造とコンテンツを保持します。

今; JOINどういうわけか、1つのクエリで3つを一緒にしたいと思います。

私がこの質問を書いている間、私が得たアイデアの1つは、3つのデータベースすべてにアクセスできる別の「スーパー」ユーザーを用意し、定期的なマルチテーブルクエリを実行することでした。それは許容できる解決策でしょうか?

その場合、クエリでどのデータベースも指定する必要がありますか?

4

1 に答える 1

5

3つのデータベースすべてにアクセスできるユーザーが必要です。

次のように、完全なテーブル名を指定して、それらを結合します。

SELECT * FROM database_1.logs AS d1 LEFT JOIN database_2.users AS d2 
  ON d1.username = d2.username ORDER BY d1.timestamp DESC LIMIT 10
于 2012-12-04T12:58:43.253 に答える