0

我需要连接来自不同数据库的两个表。
代码看起来像这样:

$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

如果您的两个用户中的每一个都只能访问一个数据库而不能访问另一个数据库,那么您将无法在一个查询中同时使用这两个数据库/表——因为没有用户能够运行该查询。

您要么必须:

  • 获取可以访问这两个数据库的用户 - 因此,可以运行此查询,
  • 或者使用有权访问它的用户从每个数据库/表中获取数据——然后从你的 PHP 代码中处理这些数据以合并它们(基本上,在 PHP 中进行连接,而不是在 SQL 中;即使这可能不是最有效的想法)
于 2012-05-18T04:51:54.653 回答
0

您不能从两个数据库加入。尽可能考虑使用一个数据库,它使编程更容易并提高性能。在 PHP 中有很多方法可以做到这一点,但是它们相当复杂并且对性能非常不利。

于 2012-05-18T04:56:03.393 回答
0

至少对于 Oracle,前面建议的替代方案的第三个选项是在 DB1 中创建一个数据库链接,这将提供从 DB2 中选择的一些信息。

它的工作方式是您首先创建数据库链接

-- 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;

并结合查询“本地”数据库。此外,如果您不想每次都输入数据库链接,可以使用同义词。

这是 Oracle DB 链接的手动条目,其中包含更多示例和进一步说明。

对于 MySQL,在这个线程中讨论了一些替代方案。显然没有直接的选择。

于 2012-05-18T10:54:19.457 回答