我有一个包含以下字段的数据库表:
username, description, password.
有时,成员会互相复制描述,以节省时间
所以我有这个:
约翰 - 约翰的描述 - 约翰的密码
迈克尔 - 约翰的描述 - 迈克尔的密码
是否有搜索重复字段条目并删除它们的 mysql 查询?在我们处理数据时删除整行数据怎么样?
创建一个新表,在其中移动不重复的条目,删除旧表并重命名一个新表。
例子:
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 个相同单词的行可能是重复的。您可以根据输入描述的长度设置阈值。
你永远无法确定它是否重复,除非它是完全相同的条目。