Mysqli 连接来自 2 个不同数据库的表

Posted

技术标签:

【中文标题】Mysqli 连接来自 2 个不同数据库的表【英文标题】:Mysqli join tables from 2 different databases 【发布时间】:2014-03-10 09:35:45 【问题描述】:

如何使用这 2 个连接来运行连接 2 个表的查询? yesno.table1 和 sushi.table1 ?假设我们通过id 加入,他们都有相同的ID。 我该怎么做?

// Connect to Yesno Database
$this->yesno_db = new mysqli("red", "yesno", "***", "yesnotmp");

if ($this->yesno_db->connect_errno) 
    throw new Exception('Connection failed: '.$this->yesno_db->connect_error);
   

// Connect to Sushi Database
$this->sushi_db = new mysqli("red", "sushi", "***", "sushi");

if ($this->sushi_db->connect_errno) 
    throw new Exception('Connection failed: '.$this->sushi_db->connect_error);

【问题讨论】:

【参考方案1】:

这个问题与mysqli(或任何其他API)无关。

要与来自不同数据库的表进行连接,连接到 mysql 的用户必须对两个数据库都具有 SELECT 权限。

完成此操作后,只需在连接语句中选择一个数据库,然后使用通常的点语法寻址另一个:

SELECT * FROM t1 JOIN db2.t2

从字面上回答你的问题,

我可以使用这 2 个连接来运行连接 2 个表的查询吗?

你不能

【讨论】:

【参考方案2】:

这是可能的,但不是您尝试的方式。

首先,您需要有一个具有访问这两个数据库的权限的 mysql 用户。

然后您只需在查询中引用辅助数据库即可。

例如

// Connect to Database -- dbuser has permissions for database1 and database2
$this->db = new mysqli("localhost", "dbuser", "***", "database1");

$query = "SELECT t1.*, t2.* 
              FROM table_one AS t1
              INNER JOIN database2.table_two as t2 ON ( t1.id = t2.remote_id ) ";

如果数据库位于两台不同的服务器上,这是不可能的。

【讨论】:

【参考方案3】:

这是可能的,但并不漂亮。

MySQL 支持联合存储引擎,有效地允许您在其中一个数据库上设置看起来像表的内容,实际上只是与另一个数据库上的真实表的连接。

之前的回复可能会有所帮助:-

MySQL -- Joins Between Databases On Different Servers Using Python?

【讨论】:

以上是关于Mysqli 连接来自 2 个不同数据库的表的主要内容,如果未能解决你的问题,请参考以下文章

连接来自不同数据库的表的性能影响

如何内部连接来自不同数据上下文的表? [复制]

MariaDB 根据列值连接来自不同数据库的表

Laravel 4:连接来自不同数据库的表

如何将来自不同表但相同数据库mysqli php的2列相乘[关闭]

SQLite - 你如何连接来自不同数据库的表?