【问题标题】:Mysqli join tables from 2 different databasesMysqli 连接来自 2 个不同数据库的表
【发布时间】: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);
}

【问题讨论】:

    标签: php mysql sql


    【解决方案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?

        【讨论】:

          猜你喜欢
          • 2013-11-11
          • 2019-03-09
          • 2017-10-21
          • 1970-01-01
          • 2014-10-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多