2016-08-08 2 views
0

다음과 같이 나는 계정 내 스키마를 가지고 : 나는문자열을 MySQL을 사용 중복을 감지하고 이름을 바꿀 수 없습니다

filename.txt 
filename1.txt 
filename2.txt 
filename3.txt 

: 파일 이름이 반복 내가 같이 그것을 저장할

AccountID | FileName 

경우 현재 중복 수를 확인하기 위해 쿼리를 실행 한 다음 백업 된 파일 및 마지막으로 실행중인 삽입 쿼리에서 파일 이름의 이름을 변경하여 중복 횟수를 확인하여이 작업을 수행합니다.

이 전체 절차를 하나의 쿼리로 수행 할 수 있습니까?

+0

그래서 'Account'에 삽입 할 때 파일 이름이 존재하면 파일 이름을 새로운 것으로 바꾸겠습니까? 그리고'accountId'의 가치는 무엇입니까? – Blank

+0

mysql에 저장 프로 시저가 있어야 기존의 파일 이름에 대해 새로운 입력을 확인하거나 업데이트 할 수 있습니다. 또는 원하는 프로그래밍 언어로 지금까지 무엇을 달성하려고 시도했는지 확인할 수 있습니다. 그 코드를 PLZ 공유 할 수 있습니까? – Sami

답변

0

단일 쿼리를 수행 할 수 있습니다

Select t.ID, t.Account, z.dupCount 
From Filename 
Join 
    (select Account, Count (*) dupCount 
    from filename 
    group By account 
    Having Count(*) > 1) z 
    On z.account = t.Account 
order By dupCount Desc 
0

중복

수하지만 에는 중복이없는 우리를 표시 한 데이터를 확인하는 쿼리를 실행.

예 모든 파일의 이름이 원래 filename.txt로 지정 될 수도 있지만 원본 이름도 저장하지 않으면 복제본이 무엇인지 알 수 없습니다. 추가 문제는 삭제 될 레코드를 처리해야하는지 여부를 모를 때 발생합니다.이 시점에서 카운트가 쓸모 없게되고 최대 값도 작동하지 않습니다 (filename10.txt는 filename1.txt보다 작습니다).).

또한 filename.txt라는 11 개의 파일을 업로드 한 경우를 생각해보십시오. 원래 이름이 filename1.txt 인 파일을 추가하려고하면 어떻게 될까요? 고유 한 이름이므로 원래 이름을 기반으로 비교할 수는 없지만 파생 된 이름이 filename11.txt와 충돌합니다.

현재 문제에 대해 고안 한 솔루션의 구현을 찾고 있습니다. 이 솔루션의 구현은 터무니없이 복잡 할 것입니다. 실제로 구현하기 쉬운 솔루션을 찾아야합니다. 제공된 파일 이름에 MySQL 레코드의 autoincrement id 접두어를 붙임으로써 파생 된 파일 이름을 생성합니다.

관련 문제