2012-04-10 2 views
1

MySQL에서 텍스트 필드에서 가까운 항목을 찾는 방법이 있습니까? [email protected]을 검색 할 때 [email protected]을 검색한다고 말하십니까?MySQL - 가까운 일치 찾기

그래서 기본적으로 사용자가 그들의 자신의 이메일 주소를 검색하고, 원래는

+2

가까운 성냥의 의미에 따라 다릅니다. – liquorvicar

+0

@liquorvicar 예. 어쨌든, google의 'Did you mean : ...'과 같은 것이 아무것도 없습니다. :) –

+1

@MostyMostacho 그래, 우리는 단지 G의 알고리즘을 가질 수 있다면 ... 어쨌든 당신의 levenshtein 링크 +1. 거기에 MySQL에 대한 구현이 있었는지 몰랐어요 – liquorvicar

답변

7

패턴 일치로 이런 종류의 문제를 해결하는 것은 목의 통증 일 것입니다.

두 문자열 간의 Levenshtein 거리는 한 문자열을 다른 문자열로 변환하는 데 필요한 최소 작업이며, 한 연산은 삽입, 삭제 또는 한 문자의 대체 일 수 있습니다.

this을 확인하십시오.

+0

이것은 * 완벽한 *, 감사합니다! – BenOfTheNorth

+1

나에게도 소식. 나는 이것이 완벽하다고 느끼지만, 긴 이메일 주소에는 아주 느릴 것이다. 잘하면 거기에 너무 많은 시간을 실행해야합니다 arent. –

+1

그냥 테스트 해봤는데 효과적입니다. 이것은 사용자가 이메일을받지 못했을 때 수동으로 이메일을 재전송하기위한 것일 뿐이므로 직접 실행하지 않아도됩니다. – BenOfTheNorth

1

약간 떨어져 있다면 잘못, 그것은 잠재적 인 일치를 던져 데이터베이스에 입력 된 경우 일부 pattern matching로 시작하려고합니다.

SQL 패턴 매칭은 (제로 문자를 포함하여) 문자 의 임의의 수와 일치하는 단일 문자 "%"와 일치하는 "_"를 사용 할 수 있습니다. MySQL에서 SQL 패턴은 기본적으로 으로 대소 문자를 구별합니다. 여기에 몇 가지 예가 나와 있습니다. SQL 패턴을 사용할 때는 use = 또는 <>을 사용하지 마십시오. 대신 LIKE 또는 NOT LIKE 비교 연산자 을 사용하십시오.

+0

이 문제는 내가 같이 사용하면, 너무 느슨하게 될거야, 내가 정규식을 사용하는 경우, 너무 빡빡합니다. 규칙 세트가 필요없는 무언가를 찾을 일반 무언가가 필요합니다 – BenOfTheNorth

+0

정규식은 특정 또는 일반이 될 수 있습니다. 'LIKE' 키워드는 누락 된 문자 또는 중간에있는 문자 세트를 찾을 수 있습니다. 더 많은 것을 원한다면 정규식으로 가라. 당신은 단지 잘못된 정규식 문자열을 사용할 수 있습니다. –

+0

나는 아직 아무것도 사용하지 않고있다. 나는 그 모든 것을 가정하고 있었다. 나는 @에서 전자 메일 주소를 분리하고 상반기와 후반기에 별도로 – BenOfTheNorth