【问题标题】:Cross server join in PHP sqlPHP sql中的跨服务器连接
【发布时间】:2015-05-15 15:56:39
【问题描述】:

我有两台 sql 主机,我想在其上运行我的 sql 查询。 它应该看起来像这样: 假设两台主机 -> host1.DB1 & host2.DB2

select a.*, b.* from host1.DB1.table as a join host2.DB2.table on a.key=b.key

到目前为止,我已经在这个论坛和谷歌上阅读了很多答案,但在任何地方都没有运气..!!

【问题讨论】:

  • 这是不可能的。

标签: php mysql sql sqlite


【解决方案1】:

AFAIK 这是不可能的,因为您只能通过一个连接器运行查询,该连接器一次只能连接到一个数据库服务器。您需要运行一个查询,然后运行第二个查询并在 PHP 中合并结果。

远程关闭的唯一情况是,如果您要连接到同一主机上的两个数据库。 This answer 涵盖了这一点。

这方面的一个例子是:

$rowsA = $rowsB = [];
$mysqliA = new mysqli($hostA, $usernameA, $passwordA, $databaseA);
$mysqliB = new mysqli($hostB, $usernameB, $passwordB, $databaseB);

$query = "SELECT id, A1, A2, A3 FROM tableA";
$resultA = $mysqliA->query($query);
while($row = $resultA->fetch_assoc())
{
    $rowsA[$row['id']] = $row;
}

$query = "SELECT id, B1, B2, B3 FROM tableB";
$resultB = $mysqliB->query($query);
while($row = $resultB->fetch_assoc())
{
    $rowsB[$row['id']] = $row;
}

$all_rows = array_merge_recursive($rowsA, $rowsB);

查看eval.inarray_merge_recursive 工作示例。

【讨论】:

  • 谢谢..!!关于如何做的任何建议?我是新来的。据我所知, array_merge 无济于事,因为它附加了数据集。 TIA..
  • array_merge 应该可以很好地处理这两个结果。
  • 对不起,你要的是array_merge_recursive,以see this eval.in为例。
  • 会尝试并得到结果..!!
  • @PrateekSaxena 我在回答中为您添加了一个示例。
【解决方案2】:

根据您要加入的记录的数量,通过代码完成此操作会花费大量时间。

如果你是 DBA 或者 DBA 愿意帮助你,为什么不尝试使用链接服务器??

使用链接服务器,您可以使用 PHP 在任一服务器中运行查询,因此您的代码将如下所示:

$query = "SELECT a.id_col, b.col, a.other_col 
FROM [SERVER1].[your_db].[dbo].your_table
INNER JOIN your_other_table b
ON a.id_col = b.id_col";

这样,您可以从任一服务器运行查询。

如果您使用的是 SQL Server,则可以像 this 或使用 SSMS 一样执行此操作,例如 this

我从来没有在 MySQL 中创建过链接服务器,但是在这个 link 你可以找到如何做。

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2018-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-11
    • 2013-06-17
    • 2018-11-14
    • 1970-01-01
    相关资源
    最近更新 更多