MySQL Query基于字符串

时间:2012-03-03 04:53:13

标签: php mysql

这个查询过去10个小时一直困扰着我。我们走了:

我想对我提取的一些数据进行比较。我正在拉名字,我想删除相似的名称,并且不会在查询中返回。

示例:

我有以下名字:

  • 海边高地
  • Seaside HGTS
  • 塔拉迪加
  • Tornkal中心
  • Tornkal CTR
  • Yonkers的
  • Zebraville

我希望它像这样返回:

  • 海边高地
  • 塔拉迪加
  • Tornkal中心
  • Yonkers的
  • Zebraville

基本上我认为它应该是substring(name,0,8)来获取前8个字符,然后针对下一个条目运行8个字符,如果匹配则忽略它。

也许我正在考虑深入研究这个问题。任何可能有用的见解或概念将不胜感激。

4 个答案:

答案 0 :(得分:1)

首先,您将查询所有数据。

然后,对于返回的每条记录,您都要运行LCS算法(最长公共子序列)。

如果两个不同记录之间的最长公共子序列是您选择的数量,那么您可以将它们归类为相似。

http://en.wikipedia.org/wiki/Longest_common_subsequence_problem

编辑:就是这样,有一个很好的PHP函数: http://php.net/manual/en/function.similar-text.php

答案 1 :(得分:1)

尝试以下:

如果字符串之间的差异与您在示例中说明的相似。

 select names from tablename group by substring_index(names," ",1)

答案 2 :(得分:0)

您可能需要查看soundex。它不会是完美的,但它可以让你进入球场。

答案 3 :(得分:0)

如果字符串之间的差异仅限于一小组缩写(HGTS< - > Heights,CTR< - > Center等),您可能只想保留一个表并替换缩写使用完整版本,然后检查唯一性。