MySQL:查找类似的重复条目

时间:2012-09-05 23:58:28

标签: php mysql sql

鉴于我的表

id | name
 01| Test Name
 02| Name Test
 03| Another name
 ...
 ...
 nn| Test string

我想对每个条目执行以下操作,读取第一个单词,直到空格,所以在此示例中我将读取Test,然后,找到包含Test where 在字符串上,然后继续名称另一个,依此类推。

我不想手动执行此操作,因为我必须进行很多的查询,我们的想法是从旧的Excel电子表格导入数据并且客户端想要获取重复的名称,因此测试名称测试名称名称测试是潜在的相似名称。

3 个答案:

答案 0 :(得分:3)

您想要运行查询,选择所有名称,将其返回给php,然后循环遍历它,将字符串解析为单独的单词,并运行带有全文索引的查询。

这是让你入门的东西。 http://www.databasejournal.com/sqletc/article.php/1578331/Using-Fulltext-Indexes-in-MySQL---Part-1.htm

答案 1 :(得分:2)

这是我的数据库解决方案:

SELECT * 
FROM princess a
INNER JOIN (SELECT 
        DISTINCT CASE
            WHEN name LIKE '% %' 
                THEN SUBSTR(name, 1, LOCATE(' ', name) - 1)
            ELSE name
        END AS 'name'
    FROM princess) b ON a.name LIKE CONCAT('%', b.name ,'%')

这将使用DISTINCT找到JOIN名称(在空格之前),然后LIKE找到原始表格。

您也可以考虑使用INSTR(a.name, b.name)代替b.name LIKE CONCAT('%', a.name ,'%'),具体取决于EXPLAIN的外观。

答案 2 :(得分:0)

有很多关于如何在MySQL中将字符串拆分成多行的示例,例如: this one

之后,您可以轻松找到完全匹配的内容。如果您想要不完全匹配,请查看SOUNDEX()