【问题标题】:How to join two tables from different databases如何连接来自不同数据库的两个表
【发布时间】:2015-02-24 11:19:33
【问题描述】:

如何连接来自不同数据库的两个表。一个数据库是localhost,另一个是在线的。

$connectA = mysql_connect('localhost','root','','abc');
$connectB = mysql_connect('xxx','yyy','zzz','xyz');

我想从具有数据库 abcxyz 的表 department 中加入 department_name

【问题讨论】:

  • 您需要在 PHP 中进行处理。由于数据库不在同一台服务器上,直接JOINs 是不可能的。此外,请远离已弃用的 mysql_ 函数集 - 查看 PDOmysqli。我假设 abcxyz 参数用于创建新链接而不是重复使用以前的链接?

标签: php mysql


【解决方案1】:

只要join 是指使用SQL JOINS,就不能。是的,因为 SQL 查询总是发送到特定的数据库或服务器。

您需要发送两个独立的查询,每个数据库一个,然后在 PHP 中提供一些逻辑以通过 array_merge(完全连接)或更高级的脚本来连接它们。

如果没有看到您自己的代码,将无法提供更多帮助。

【讨论】:

  • 你能举个例子解释一下吗?
【解决方案2】:

正如已经说过的,这是不可能的。 我会保存数据库连接并在数据库之间切换。

只是一个简单的例子(和mysqli)

$db1 = mysqli_connect("localhost", "my_user", "my_password", "world");
$db2 = mysqli_connect("localhost2", "my_user2", "my_password2", "world2");

然后当你想执行查询时

mysqli_query($db1, "SELECT * ...");

或其他数据库

mysqli_query($db2, "SELECT * ...");

将查询的结果保存在数组中,然后使用例如array_merge 来加入它们。

http://php.net/manual/en/function.array-merge.php

【讨论】:

    【解决方案3】:

    如果 MySQL 用户可以访问两个数据库并且它们位于同一主机上(即两个数据库都可以从同一连接访问),您可以:

    • 保持一个连接打开并在必要时调用mysql_select_db() 进行交换。我不确定这是一个干净的解决方案,您最终可能会查询错误的数据库。

    • 在查询中引用表时指定数据库名称(例如SELECT * FROM database2.tablename)。这可能很难实现。

    另外请阅读 troelskn 的回答,因为如果您能够使用 PDO 而不是较旧的扩展,这是一种更好的方法。

    【讨论】:

    • OP 说一个是本地主机,另一个是在线的(我假设他在他的机器上使用 php,并使用他机器上的一个数据库和互联网上的一个数据库)
    【解决方案4】:

    使用可以使用数据库联合(数据虚拟化)技术,如 Teiid http://teiid.io 并跨数据库连接表,甚至连接来自文件和 Web 服务的数据。

    【讨论】:

      猜你喜欢
      • 2014-10-05
      • 1970-01-01
      • 1970-01-01
      • 2020-11-05
      • 2018-04-27
      • 2019-11-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多