删除MySQL中所有特定重复条目的第一行

时间:2011-04-22 12:34:53

标签: php mysql phpmyadmin

我的问题是我的表中有重复的条目。然而,事情并非那么简单。有些是有效的副本,有些则不是。例如,E Pearl River, NYEast Pearl River, NY是同一个城市,而Bardonia, NYNanuet, NY则不是。因此,如果我删除所有重复项,它将删除像Bardonia这样的有效城市。

我的问题是,有没有人知道循环每一行的方式(用SQL或任何编程语言)并执行以下操作:

  • 检查行是否重复
  • 检查city是否有部分匹配(即E 珠江,纽约和东珠江,纽约
  • 删除重复行的第一个
  • 如果city(即Bardonia,NY和Nanuet,NY)没有部分匹配,请继续前进。

之前

+—————————+——————————————————————+
| zipcode |        city          |
+—————————+——————————————————————+
|  10956  | E Pearl River, NY    |
|  10956  | East Pearl River, NY |
|  10977  | Spring Valley, NY    |
|  10954  | Bardonia, NY         |
|  10954  | Nanuet, NY           |
+—————————+——————————————————————+

之后

+—————————+——————————————————————+
| zipcode |        city          |
+—————————+——————————————————————+
|  10956  | East Pearl River, NY |
|  10977  | Spring Valley, NY    |
|  10954  | Bardonia, NY         |
|  10954  | Nanuet, NY           |
+—————————+——————————————————————+

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

您的问题没有简单的解决方案,因为它涉及自然语言处理。

如何定义纽约珠江河 东珠江,纽约?东珠江和西珠江怎么样?对于自然语言处理,您应该查看LuceneMySQL Full-Text Search

对于相当简单(但不一定非常准确)的解决方案,您可以尝试实施简单的Levenshtein distance度量。