2012-03-03 5 views
-1

이 쿼리는 지난 10 시간 동안 나를 괴롭혔습니다. 여기 우리가 간다 :MySQL 쿼리 문자열 기반

내가 끌어 당기는 일부 데이터와 비교하고 싶다. 나는 이름을 추측하고 있으며 비슷한 이름을 삭제하고 쿼리에서 반환하지 않도록하고 싶습니다.

예 :

  • 시사 이드 하이츠
  • 해변 HGTS
  • 탈라 데가
  • Tornkal 센터
  • Tornkal CTR
  • 금호
  • : 나는 다음과 같은 이름을 가지고

  • Zebraville

는 나는 다음과 같이 반환 할 :

  • 시사 이드 하이츠
  • 탈라 데가
  • Tornkal 센터
  • 커스를
  • Zebraville

기본적으로 첫 번째 8자를 가져와 다음 항목에 대해 8자를 실행하고 무시할 경우 substring (name, 0, 8)이어야한다고 생각합니다.

어쩌면 나는이 문제에 깊이 관여 할 생각이다. 어떤 통찰력이나 개념이 효과가 있을지 이해할 것입니다.

+0

PHP 또는 MySQL을 사용하면 문제가 발생합니까? –

+0

입력과 출력의 관계는 무엇입니까 ?? 'substring (name, 0, 8)'에 대해 무엇을 가질 것인가? –

+0

공간 전에 만 컴파 일할 필요가 있습니까? –

답변

1

먼저 모든 데이터를 쿼리합니다.

그런 다음 반환 된 모든 레코드에 대해 LCS 알고리즘 (Longest Common Subsequence)을 실행하려고합니다.

두 개의 서로 다른 레코드 사이의 가장 긴 공통 서브 시퀀스가 ​​원하는 숫자이면 가장 비슷한 서브 클래스로 분류 할 수 있습니다.

http://en.wikipedia.org/wiki/Longest_common_subsequence_problem

편집 : 너무 멋진 PHP 기능이 거기에있어 발생합니다 http://php.net/manual/en/function.similar-text.php

0

당신은 soundex를 살펴 할 수 있습니다. 완벽하지는 않지만 공 파크에서 구할 수 있습니다.

0

문자열 간의 차이가 작은 약어 세트 (HGTS < -> 높이, CTR < -> 센터 등)로 제한되어있는 경우 해당 테이블을 유지하고 약자를 전체로 바꿀 수 있습니다 그런 다음 고유성이 있는지 확인하십시오.

1

다음을 시도하십시오.

예를 들어 설명했듯이 문자열의 차이가 비슷한 경우.

select names from tablename group by substring_index(names," ",1) 
+0

집계 함수없이 Group by? –

+0

그러나 MySQL은 단순히 하나의 값을 선택할 때 이것을 허용합니다. –