0

異なるデータベースの 2 つのテーブルを結合する必要があります。
コードは次のようになります。

$tbl1 = 'table1';
$tbl2 = 'table2';

$DB1 = 'DB1';
$DB2 = 'DB2';

$connect1 = mysql_connect(DB_SERVER,DB_USER1,DB_PASSWORD1);
mysql_select_db ($DB1, $connect1);

$connect2 = mysql_connect(DB_SERVER,DB_USER2,DB_PASSWORD2);
mysql_select_db ($DB2, $connect2);
/* note both the DB are in the same server and users has privileges to theyr own datadases say usr1 to DB1, usr2 to DB2 */

mysql_query("SELECT * FROM $DB1.$tbl1 AS tb1 LEFT JOIN $DB2.$tbl2 AS tb2 ON tb1.id = tb2.id", $connect1);

上記のクエリは、table2 が存在しないというエラーを返します。$connect1

人々を助けてください!!

4

3 に答える 3

2

2 人のユーザーのそれぞれが 1 つのデータベースにしかアクセスできず、他のデータベースにはアクセスできない場合、1 つのクエリで両方のデータベース/テーブルを使用することはできません。そのクエリを実行できるユーザーがいないためです。

次のいずれかを行う必要があります。

  • 両方のデータベースにアクセスできるユーザーを取得し、このクエリを実行できるようにします。
  • または、アクセス権を持つユーザーを使用して各データベース/テーブルからデータをフェッチし、PHP コードからそれらのデータを処理してそれらをマージします(基本的に、SQL ではなく PHP で結合を行います。それがおそらくそうでなくても)。最も効率的なアイデア) .
于 2012-05-18T04:51:54.653 に答える
0

少なくともOracleの場合、前述の代替案の3番目のオプションは、DB2から選択した情報を利用できるようにするデータベースリンクをDB1に作成することです。

それが機能する方法は、最初にDBリンクを作成することです

-- as the current user
CREATE DATABASE LINK sales.us.americas.acme_auto.com USING 'sales_us';

-- as another user, shared public
CREATE SHARED PUBLIC DATABASE LINK sales.us.americas.acme_auto.com
CONNECT TO scott
IDENTIFIED BY tiger
AUTHENTICATED BY anupam
IDENTIFIED BY bhide USING 'sales';

次に、次のようにクエリできます

SELECT * FROM target_table@sales.us.americas.acme_auto.com;

また、「ローカル」データベースのクエリと組み合わせます。また、毎回dbリンクを入力したくない場合は、同義語を使用できます。

これは、Oracle DBリンクの手動エントリであり、いくつかの例と詳細が含まれています。

MySQLの場合、いくつかの代替案がこのスレッドで説明されています。どうやら直接的な代替手段はありません。

于 2012-05-18T10:54:19.457 に答える
0

2 つのデータベースから参加することはできません。可能な限り 1 つのデータベースを使用することを検討してください。これにより、プログラミングが容易になり、パフォーマンスが向上します。PHP でこれを行う方法はありますが、かなり複雑で、パフォーマンスが非常に悪くなります。

于 2012-05-18T04:56:03.393 に答える