使MySQL表独一无二

时间:2009-09-30 11:28:25

标签: php mysql unique duplicates

Hay,我创建了一个爬行PDF文档的蜘蛛,并将文档中的每个单词记录到MySQL数据库的表中。

显然,像'','和','或'之类的词语很多次出现在一本书中。

我只是想知道从表中删除重写值的最快方法是什么?

5 个答案:

答案 0 :(得分:3)

创建一个表而不对单词编制索引,并使用批量插入放入书中的所有单词(您也可以使用LOAD DATA)。完成插入后,在word字段

上添加新索引

然后使用以下方法创建第二个表:

CREATE TABLE newTable SELECT DISTINCT word FROM oldTable

答案 1 :(得分:1)

您可以确保没有重复项进入表格,而不是删除重复项。

假设您的表只有2个字段,id和word:

INSERT INTO table SELECT null, 'word' FROM table WHERE NOT EXISTS (SELECT * FROM table WHERE word = 'word') LIMIT 1;

只有在单词尚未存在的情况下,才会将单词插入表中

答案 2 :(得分:1)

如果您可以重新运行脚本来填充数据库,则可以在“word”字段上添加唯一键,而不是INSERT INTO执行REPLACE INTO。这将在添加重复字段之前删除记录的先前实例。这可能不是最有效的方法,但它相当简单。有关详细信息,请参见此处:

http://dev.mysql.com/doc/refman/5.0/en/replace.html

答案 3 :(得分:0)

delete from words where idcolumn not in
  (select min(idcolumn) 
   from words T2 
   where T2.plain = WordsTable.plain)

如果您为找到的每个字词添加(idcolumn, plain),则此方法有效。

如果您没有id列(pk),那么您可以使用Anax的解决方案。

除了不插入重复项(codeburger comment)之外,您还可以在普通列上设置唯一索引。

答案 4 :(得分:0)

在单词字段上选择distinct,然后删除所有具有不同id的行?我不是子查询的主人所以没有例子atm:)