2009-09-30 3 views
0

건초, 나는 거미를 만들어 PDF 문서를 크롤링하고 문서의 모든 단어를 MySQL 데이터베이스의 테이블에 기록합니다.MySQL 테이블을 고유하게 만듭니다.

'the', 'and', 'or'등의 단어는 분명히 책에 여러 번 나타납니다.

테이블에서 사기 값을 제거하는 가장 빠른 방법이 무엇일까 궁금한가요?

답변

3

단어를 색인하지 않고 테이블을 만들고 거기에없는 유일한 경우는 테이블에 단어를 삽입합니다

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

및 대량 삽입물을 사용하여 책에서 모든 단어를 입력하십시오 (LOAD DATA를 사용할 수도 있습니다). 고유 한을 추가 할 수 있습니다,

CREATE TABLE newTable SELECT DISTINCT word FROM oldTable 
0
delete from words where idcolumn not in 
    (select min(idcolumn) 
    from words T2 
    where T2.plain = WordsTable.plain) 

발견 한 모든 단어에 (idcolumn, plain)을 추가하면 작동합니다.

id 열 (pk)이 없다면 Anax 솔루션을 사용할 수 있습니다.

복제본 (코드 버그 주석)을 삽입하지 않고 일반 열에 고유 색인을 설정할 수 있습니다.

+0

단어 표는 '단어'라고하며 단어를 포함하는 분야는 '일반'입니다 – dotty

0

단어 필드에서 distinct를 선택한 다음 다른 ID를 가진 모든 행을 삭제 하시겠습니까? 나는 하위 쿼리의 마스터가 아니기 때문에 예제가 없다.

1

중복을 제거하는 대신 테이블에 복제본을 만들지 않아도된다.

가정하면 테이블 만 2 개 필드, ID와 단어가있다 : 그것은

1

스크립트를 다시 실행할 수있는 경우 데이터베이스를 채우는 데 : 당신은 삽입을 완료하면,

그런 다음 사용하여 두 번째 테이블을 만들 word 필드에 새 인덱스를 추가 INSERT INTO 대신 "word"필드의 키를 사용하여 REPLACE INTO를 수행하십시오. 그러면 중복 필드를 추가하기 전에 레코드의 이전 인스턴스가 삭제됩니다. 이것은 가장 효율적인 방법은 아니지만 다소 단순합니다. 자세한 내용은 여기를 참조하십시오 :

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

관련 문제