这个查询过去10个小时一直困扰着我。我们走了:
我想对我提取的一些数据进行比较。我正在拉名字,我想删除相似的名称,并且不会在查询中返回。
示例:
我有以下名字:
我希望它像这样返回:
基本上我认为它应该是substring(name,0,8)来获取前8个字符,然后针对下一个条目运行8个字符,如果匹配则忽略它。
也许我正在考虑深入研究这个问题。任何可能有用的见解或概念将不胜感激。
答案 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等),您可能只想保留一个表并替换缩写使用完整版本,然后检查唯一性。