2017-02-08 6 views
1

要約。私は2つのデータベース(Invoices.gdbとUsers.gdb)を持っています 私はどこのインボイスが顧客にリンクされているかを見ることができるテーブルを取得したいです info:私はテーブルに自分の値を取得するためのPHPコードを知っています。私は2つのデータベースの間で自分のリンクを取得し、どのようにこのクエリを実行することができません。PDOを使用した2つのFirebirdデータベースへのリンク

マイPDOクラスは、私のユーザーを取得するだけです

class DatabasePDO{ 
    /** @var PDO */ 
    private static $dbh; 

    static function getInstance(){ 
     $str_conn="firebird:host=localhost;dbname=C:/Users/Desktop/USERS.GDB;charset=UTF8"; 
     try{ 
      self::$dbh = new PDO($str_conn, "username", "password"); 
     } 
     catch(PDOException $e){ 
      echo "Error!: ".$e->getMessage(); 
      die(); 
     } 
     return self::$dbh; 
    } 

(のみ1つの接続今が含まれている)(そして、それは動作します)。請求書DBを追加するにはどうすればよいですか?

これは私が作りたいクエリは、これは次のようである私のクラス

public static function getInvoices() { 
     $conn = DatabasePDO::getInstance(); 
     $sql = "select * from users.customers as A , invoices.invoice as B 
       where a.customers.customerid = b.invoice.customerid"; 
     $st = $conn->prepare($sql); 
     $st->execute(); 
     $list = array(); 
     while ($row = $st->fetch()) { 
      $invoice= new invoice($row); 
      $list[] = $invoice; 
     } 
     $conn = null; 
     return $list; 
    } 

です:

select * from users.customers as A , invoices.invoice as B 
where a.customers.customerid = b.invoice.customerid 

私は2つのデータベースを一緒にマージすることはできません。だからこそ解決はありません。 ありがとうございます!

+0

FirebirdまたはInterbaseを使用していますか?彼らは同じことではありません。 –

+0

ファイヤーバード、申し訳ありません。 – Steven

答えて

2

ファイアバードデータベースは隔離されており、データベース間を結合することはできません。最良の解決策は、2つのデータベースを1つにマージすることです(外部キー制約などの整合性チェックを持つという利点もあります)。

次善のは、あなたの請求書データベースにあなたのユーザーデータベース(あるいは少なくとも、必要なテーブル)のコピーを持っていることであろう。 ユーザーからの請求書の変更を同期させる必要があります(たとえば、トリガーとEXECUTE STATEMENT ON EXTERNALを使用するか、同期を行う予定のジョブ)。

それ以外の場合は、コードで手作業で参加する必要があります。これは最適ではありません。

+0

2つのデータベースを2つの別々のプログラム(exe)用に作成したため、2つのデータベースを単純にマージすることはできません。 それは、私は必要なすべてのデータを格納し、そこからデータを取得する別のmysqlのデータベースを作るための解決策かもしれませんか? – Steven

+0

@ Steve異なるプログラム用に作成された場所であっても、1つのデータベースにデータを格納することはできません。また、MySQLに移行することで、データベースをマージするだけでなく、データを他のデータベースにコピー/レプリケートするよりも簡単に作業を進めることができます。 –

+0

可能です。しかし、両方のデータベースが毎日更新されています。だから、それを最新の状態に保つための解決策を見つけなければならない – Steven

関連する問題