2013-04-04 316 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

相關問題