我可以从不同的数据库加入两个表吗?

时间:2013-04-04 12:58:13

标签: php mysql sql-server arrays join

我有两个不同的数据库表,必须(内部)相互连接。一个表来自MSSQL数据库,一个来自MySQL数据库。我几乎肯定不可能在数据库级别加入这些表,所以我必须用PHP(我正在使用的脚本语言)来完成这个。

只是为了清楚说明,这是关于获取订单信息。我的MSSQL数据库包含order_idorder_descriptiondelivery_date等列。我的MySQL数据库具有相同的订单ID和状态(例如“已启动”,“暂停”,“准备“,”交付“)。我想要的是在一个表格中加入的所有信息。

我正在考虑从MSSQL数据库获取所有信息,然后从MySQL数据库中选择每个组的状态,但这是一个巨大的性能问题:如果我有1000行,我将不得不做1000个SELECT。

真正完美的是在两个数据库上进行简单的SELECT,将结果放在两个不同的数组中并合并数组。我知道有一个名为array_merge_recursive()的PHP函数,但它只是将两个数组粘在一起而不是将它们连接到主键(order_id)。

在一个概述中获取两个数据库表的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

我会考虑从SQL Server创建到MySQL服务器的链接服务器。然后,您可以在两个表之间编写连接,就像它们位于同一服务器上一样。如果创建视图,则可以从应用程序中对视图执行选择。我认为它比在你的应用程序中“加入”更快。它应该更容易编码。

要对视图进行编码,您可以使用四部分命名约定来引用MySQL服务器:

示例:

select *
from mysqlsrv.mydb1..mytbl join
mssql.mydb2.dbo.myOtherTbl

答案 1 :(得分:1)

如果您想使用两个相同的数组中的键,并且只替换值,则只需要array_merge()

  

如果输入数组具有相同的字符串键,则该键的后一个值将覆盖前一个键。但是,如果数组包含数字键,则后面的值不会覆盖原始值,但会附加。

     

带有数字键的输入数组中的值将使用从结果数组中的零开始的递增键重新编号。

但是,从两个数据库中获取信息并将其写入数组仍然与使用SELECT获取信息并将获取的行用作另一个SELECT中的匹配相同。