2013-04-04 154 views
1

我有两个不同的数据库表必须(内部)互相连接。一个表来自MSSQL数据库,另一个来自MySQL数据库。我几乎肯定无法在数据库级别加入这些表,所以我必须在PHP(我使用的脚本语言)中执行此操作。我可以连接来自不同数据库的两个表吗?

只是为了清楚一些事情,这是关于获取订单信息。我的MSSQL数据库有一些列,如order_id,order_description,delivery_date等。我的MySQL数据库具有与状态相同的订单ID(例如“开始”,“暂停”,“准备好”,“已交付”)。我想要的是将所有信息加入一张表中。

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

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

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

+0

最好的选择是将两个表保存在同一台服务器上。 – Arjan 2013-04-04 13:03:33

+0

为什么你需要做多个选择?你不能使用OR ..'SELECT * FROM table WHERE col ='param'OR col1 = param1' OR ...' – 2013-04-04 13:10:43

回答

1

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

要编码的观点,你可以使用一个四部分组成的命名约定是指MySQL服务器:

例子:

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

我想这两个数据库已经在同一台服务器上了,但我不知道你可以在一个查询中使用2个不同的数据库服务器。我应该如何启动查询,因为MySQL和MSSQL有两种不同类型的语法? – Jovano 2013-04-04 13:28:20

+0

您必须尝试一下,但是,如果您在SQL Server上创建链接服务器,则对查询使用SQL Server语法。 MySQL ODBC驱动程序也需要安装在SQL Server上。 – 2013-04-04 13:41:25

1

如果你想从两个数组,可以使用按键,是相等的,并且只能取代这些值,你只需要array_merge()

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

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

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

+0

这就是我最后一节中提到的那些;它只不过是坚持2个阵列,彼此。这很好,直到两个阵列的顺序不一样... – Jovano 2013-04-04 13:24:48

相关问题