MYSQL / PHP如何查找以相同单词开头的所有行?

时间:2016-10-16 07:06:14

标签: php mysql

在我的数据库中我有一个带有品牌名称的表,我需要清理它 因为我有一些像

这样的重复
  

Yadda

     

Yadda&公司

     

Yadda Engineering

这是相同的品牌,但多次错误输入,尽管该列是唯一的

如何处理这个问题?这可以只在mysql查询中完成吗?

感谢

3 个答案:

答案 0 :(得分:1)

我的优惠首先为搜索列创建FullText索引。 使用全文分数后,您可以确定字符串的相似性。 删除它们,除非它们得分更高且比门槛更高。

DELETE FROM table_name 
WHERE
    id <> (SELECT id FROM table_name ORDER BY MATCH (title) AGAINST ('Yada' IN NATURAL LANGUAGE MODE) DESC LIMIT 0,1) AND
    MATCH (title) AGAINST ('Yada' IN NATURAL LANGUAGE MODE) < threshold

另外,在Fulltext中你可以使用levenshtein函数来解决这个问题(使用相同的逻辑sql查询) how to compute similarity between two strings in MYSQL

答案 1 :(得分:0)

您可以使用substr

假设您的所有行都以&#39; Yadda&#39;你可以

 select * from my_table 
 where substr(my_column, 1, length('Yadda')) = 'Yadda');

然后,如果您需要删除不正确的行(假设您想要保存行,那么Yadda&amp; Co&#39;您可以

delete from my_table
where substr(substr(my_column, 1, length('Yadda')) = 'Yadda')
and my_column <> 'Yadda & Co';

或美国人

delete from my_table
where substr(substr(my_column, 1, length('American')) = 'American')
and my_column not in  ('American Standard', 'American Airlines');

答案 2 :(得分:0)

..WHERE distance < MAX_ALLOWABLE_DISTANCE...

在此REGEXP中代表正则表达式

这适用于T-SQL

SELECT Name FROM Table WHERE Name REGEXP '^[Y].*$'