【问题标题】:MYSQL/PHP How to find all rows that start with the same word?MYSQL/PHP 如何查找以相同单词开头的所有行?
【发布时间】:2016-10-16 07:06:13
【问题描述】:

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

雅达

雅达公司

雅达工程

虽然列是唯一的,但相同品牌但多次输入错误

如何解决这个问题?这只能在mysql查询中完成吗?

谢谢

【问题讨论】:

  • 取决于条目的匹配程度。
  • 你有公司“美国通用”和“美国标准”,你想神奇地处理这一切。祝你好运。
  • 解决这个问题最好的办法是避免品牌名称的重复。您可以使用 html 中的选择选项列出可能的品牌。 (有点难找到并列出所有品牌)

标签: php mysql


【解决方案1】:

我的提议首先为搜索列创建全文索引。 使用全文分数后,您可以确定字符串的相似性。 除非得分大于阈值,否则删除它们。

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

你也可以在这个答案中使用levenshtein函数代替全文(使用相同的逻辑sql查询) how to compute similarity between two strings in MYSQL

【讨论】:

    【解决方案2】:

    你可以使用 substr

    假设您的行都以“Yadda”开头,您可以

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

    如果你需要删除不正确的行,你可以(假设你想用'Yadda & Co'保存行,你可以

    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');
    

    【讨论】:

    • 他的问题与雅达无关
    • @Drew 。标题说..以相同单词开头的行..无论如何..答案已更新。简要说明
    • 是的,这是我想用的东西。但是如何迭代每一行(我有数千行).. 我应该在 php 中使用 for 循环吗?
    • 就像我说的,这与雅达无关:p
    • 保存一行删除其他行的逻辑是什么?
    【解决方案3】:

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

    在此 REGEXP 代表正则表达式

    这是针对 T-SQL 的

    SELECT Name FROM Table WHERE Name LIKE '[Y]%'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-08
      • 1970-01-01
      • 2011-02-22
      • 1970-01-01
      • 2019-02-01
      • 1970-01-01
      相关资源
      最近更新 更多