首页 > 解决方案 > 如何比较具有最佳性能的阵列

问题描述

我正在尝试将两个不同数据库的同一张表与 PHP/MySQL 进行比较(寻找不同的值)。

我已经在数组中拥有每个表的字段/值:

DATABASE1.CONFIGTABLE

array(2) {
  [0]=>
  array(4) {
    ["id"]=>
    string(1) "1"
    ["path"]=>
    string(20) "some/key"
    ["value"]=>
    string(1) "Unique value"
  }
  [1]=>
  array(4) {
    ["id"]=>
    string(1) "2"
    ["path"]=>
    string(21) "some/url"
    ["value"]=>
    string(21) "http://domain1.com/"
  }
}

DATABASE2.CONFIGTABLE

array(2) {
  [0]=>
  array(4) {
    ["id"]=>
    string(1) "1"
    ["key"]=>
    string(20) "some/key"
    ["value"]=>
    string(1) "Unique value"
  }
  [1]=>
  array(4) {
    ["id"]=>
    string(1) "2"
    ["key"]=>
    string(21) "some/url"
    ["value"]=>
    string(21) "http://domain2.com/"
  }
}

我想比较它们并返回一个只有不同值的数组。例如,如果所有值都相同(“id”和“key”)但“value”字段不同,则将其添加到最终数组中。

由于两个表的“唯一值”相同但域不同,因此期望数组将是这样的:

array(1) {
  [0]=>
  array(4) {
    ["id"]=>
    string(1) "2"
    ["key"]=>
    string(21) "some/url""
    ["value"]=>
    string(21) "http://domain2.com/"
  }
}

甚至更好:

array(1) {
  [0]=>
  array(4) {
    ["id"]=>
    string(1) "2"
    ["key"]=>
    string(21) "some/url""
    ["value_1"]=>
    string(21) "http://domain1.com/",
    ["value_2"]=>
    string(21) "http://domain2.com/"
  }
}

这个想法是寻找性能方面的最佳方法,因为表可以包含数千行。

我希望它清楚,提前谢谢。

标签: phpmysqlsqlarrayscompare

解决方案


您可以使用简单的 SQL 查询来识别两个表之间的不匹配记录。假设两个表具有相同id的 s 和paths,如您的示例数据所示,您可以value使用此查询在列中找到差异:

SELECT
    t1.id,
    t1.path,
    t1.value value1,
    t2.value value2
FROM database1.configtable t1
INNR JOIN database2.configtable t2 
    ON t1.id = t2.id 
    AND t1.path = t2.path 
    AND t1.value != t2.value

推荐阅读