2

我正在研究地址标准化的应用程序。我有一个包含 8000 行的数据库表,每行包含一个地址。我的目标是检查每个地址与数据库中的每个其他地址是否相似但不完全匹配,然后输出结果。

目前,我的方法是将 8000 行加载到一个数组中,并使用嵌套的 foreach 循环将地址传递给一个函数,该函数将在找到匹配项时返回 true(并将匹配项存储在数组中以在循环后输出所有匹配项) .

问题是,这需要永远加载。这通常是你们如何处理这个问题,还是我应该寻找其他解决方案?

示例:“123 garden st. ste. 140”应该匹配“123 garden street suite 140”,数据库排序的想法让我思考......

非常感谢所有帮助!,特雷弗·卡瓦诺

4

2 回答 2

4

使用for循环,因为foreach循环是资源密集型的,因为在每次交互时都会复制元素。虽然我说使用您当前的嵌套循环方法是否正确,但您将调用您的匹配方法 8000^8000 次?这也将非常密集,您可以这样做的另一种方法是使用地址字段上的排序查询数据库,因此您的匹配算法将检查array[i]地址是否等于array[i+1]等等,从而无需嵌套循环

于 2013-05-23T17:22:45.080 回答
3

您是否尝试过直接从数据库中检索所有重复的地址?

SELECT addressField
FROM tableName 
GROUP BY addressField 
HAVING COUNT (addressField)>0

该查询应检索数据库表中的所有重复地址。

然后,您可以将该查询嵌入到父查询中以处理重复项,或者简单地将结果输出到数组。

于 2013-05-23T17:41:31.727 回答