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 个不同数据库的表的主要内容,如果未能解决你的问题,请参考以下文章