2016-09-21 170 views
0

我有2個框架(Laravel - web,Codeigniter - API)和2個不同的數據庫。我已經構建了一個函數(在API上),用於檢測一個數據庫(來自兩個表)的更改並將更改應用到其他數據庫中。PHP/MySQL - 比較來自2個不同數據庫的表格

注意:沒有辦法在相同的數據庫上運行Web和API - 這就是爲什麼我要做這件事。

無論如何,這是很重要的,每一個小的變化將被認可。如果案例是新記錄或刪除記錄 - 它簡單而沒有問題。但是,如果記錄存在於兩個數據庫中 - 我需要比較它們的值以檢測更改,並且此部分變得具有挑戰性。

我知道如何以最慢和沉重的方式做到這一點(挑選每個記錄並進行比較)。

我的問題是 - 你如何建議讓它工作在智能和快速的方式?

非常感謝。

回答

1

只要MySQL用戶對兩個數據庫選擇的權利,你可以在查詢資格數據庫,像這樣:

SELECT * FROM `db1`.`table1`; 
SELECT * FROM `db2`.`table1`; 

該數據庫已被選中,當您連接到PHP沒關係。查詢中將使用正確的數據庫。

當數據庫/表名只有字母數字而不是SQL關鍵字時,刻度是可選的。

+0

由於安全性和性能方面的原因,SQL用戶對這兩個數據庫都沒有權限。我正在與API一起工作的重度網站。 – RonZ

0

根據「slave'數據庫的響應時間有不增加開銷太多兩種選擇:

  1. 如果你可以通過在前面同一個數據庫中合併兩個數據庫一個或兩個表,你可以使用FOREIGN KEYS讓數據庫爲你做艱難的工作。
  2. 使用TIMESTAMP-字段,您可以設置此字段以便在行更新時由數據庫自行更新。

選項1將是我最好的猜測,但是這可能意味着到正在運行的系統中的物理變化,如果FOREIGN KEYS是新的,你可能想測試,因爲他們可以是一個真正的PITA(恕我直言)

選項2更容易實現,但您仍然必須手動檢測對已刪除/行的更改。