데이터베이스에 중복 된 항목을 찾는 방법에 대한 질문은 많이 있지만 문제는 아닙니다.데이터베이스에서 복제본을 찾는 방법은 무엇입니까?
테이블이 약 개 있습니다. 120000 개의 항목. 나는 중복을 찾아야 해. 그들을 발견하기 위해, 나는 같은 구조하는 PHP 스크립트를 사용하여 다음
//get all entries from database
//loop through them
//get entries with greater id
//compare all of them with the original one
//update database (delete duplicate, update information in linked tables, etc.)
내 중복 검색 이후의 모든 항목을 통해 루프를 가지고 있기 때문에 초기 쿼리에 이미 모든 중복을 정렬 할 수 없습니다 100 % 유사 항목뿐만 아니라 90 % 유사 항목에도 민감합니다. 나는 그것을 위해 similar_text()를 사용합니다.
첫 번째 루프는 괜찮 았지만 루프 내의 다른 모든 항목을 반복하는 것은 너무 많은 것 같습니다. 120000 개의 항목이 있으면 (120000^2)/2 번의 반복에 가까울 것입니다.
루프 내에서 루프를 사용하는 대신 더 나은 방법이 있어야합니다. 아이디어가 있습니까? in_array() 사용에 대해 생각했지만 90 % 문자열 유사성과 같은 것에 민감하지 않으며 나에게 중복을 찾은 배열 필드를 제공하지 않습니다 - 항목을 업데이트하려면 해당 ID가 필요합니다. 데이터베이스를 올바르게.
아이디어가 있으십니까?
대단히 감사합니다!
찰스
UPDATE 1
필자가 현재 사용하고있는 쿼리는 다음과 같다 :
SELECT a.host_id
FROM host_webs a
JOIN host_webs b ON a.host_id != b.host_id AND a.web = b.web
GROUP BY a.host_id
그것은 완벽하게 원본과 중복을 보여 주지만, 내가 원본을 제거 할 필요가, 즉 관련 데이터와 함께 처음 발견 된 것입니다. 어떻게해야합니까?
고마워요! 검색어가 90 %의 유사성을 허용합니까? – weltschmerz
@Charles 그것은 두 번째 예제가 무엇인지에 대한 90 % 정의 방법에 따라 다릅니다. 이것은'col1','col2','col3' 중 적어도 두 개가 동일하거나 같은 컬럼이 모두 동일한 soundex 점수를 갖는 행을 반환합니다. 유스 케이스에 대한 정확한 쿼리는 유사성을 결정하는 데 사용하는 기준과 열 유형에 따라 다릅니다. – DaveRandom
첫 번째 솔루션을 사용하려고하지만 문제가 하나 있습니다. 발견 한 복제본뿐만 아니라 원본도 제공합니다. 원본을 표시하지 않도록하려면 어떻게해야합니까? 참고 : 중복이 여러 개있을 수 있습니다. 지금 사용하고있는 질문에 대한 질문 편집을보십시오. 고맙습니다! – weltschmerz