Mysql查询搜索包含重复字段的行并删除它们?

时间:2012-07-24 23:09:02

标签: php mysql

我有一个包含以下字段的数据库表:

username, description, password.

有时,会员会相互复制说明,以节省时间

所以我有这个:

约翰 - 约翰的描述 - 约翰的密码

迈克尔 - 约翰的描述 - 迈克尔的密码

是否有搜索重复字段条目并删除它们的mysql查询? 如何删除整行数据呢?

1 个答案:

答案 0 :(得分:0)

创建一个新表,在其中移动非重复条目,删除旧表并重命名新表。

示例:

CREATE TABLE `new_table` as
    SELECT * FROM `old_table` WHERE 1 GROUP BY [columns to remove duplicates by];

DROP TABLE `old_table`;

RENAME TABLE `new_table` TO `old_table`;

但是,它仅对定期使用有好处,并且它不会检查是否有任何重复。它只是将唯一条目分组并将它们移动到另一个表。如果您想过滤条目,这非常有用。


另一种方法是这样检查:

SELECT `name` FROM `table` WHERE `description` LIKE '%descriptiontexthere%'

然后,如果发现某些结果,则它是重复的 但是,这有一个很大的缺点:用户只能更改1个字母,查询将失败。
然而,通过将描述分成数组可以避免(不完全)这个缺点。例如,每100个字符拆分一次,然后像上面的示例一样检查,但是有多个条件(例如description LIKE 'first100chars' OR description LIKE 'second100chars')。


第三种方法是将描述拆分为单词数组,然后选择具有太​​多相同单词的行。具有X相同单词的行可能是重复的。您可以根据输入的描述的长度设置阈值。

您永远无法确定它是否重复,除非它完全相同。