php - 如何比较具有最佳性能的阵列
问题描述
我正在尝试将两个不同数据库的同一张表与 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/"
}
}
这个想法是寻找性能方面的最佳方法,因为表可以包含数千行。
我希望它清楚,提前谢谢。
解决方案
您可以使用简单的 SQL 查询来识别两个表之间的不匹配记录。假设两个表具有相同id
的 s 和path
s,如您的示例数据所示,您可以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
推荐阅读
- highcharts - 在 Highcharts 中更改系列的工具提示形状
- python - 如何从类内部调用函数?
- cplex - CPLEX 12.8.0 运行时错误
- c++ - std::map 在 [] 上调用默认构造函数,在 insert() 上调用复制构造函数
- javascript - 如何从静态函数内部访问 Mongoose 模型
- pymc3 - 如何实施联合超先验?
- laravel - 如何验证某人是否是 facebook 用户
- android - 无法删除文件android studio 3.1.3
- wpf - WPF 结束当前线程
- java - 使用 Java 时 IntelliJ 社区中没有错误波浪