2009-03-12 8 views
3

하나 이상의 검색기를 입력하여 AND 조건을 구성 할 수있는 검색을 구현하려고합니다. 또한 데이터베이스의 다른 필드를 검색해야합니다. 예를 들면 그래서SQL 쿼리 - 여러 필드에서 검색

:
당신을 당신이 "빌 시애틀"를 입력, 어디 NAME 일치 CITY 일치 시애틀 기록을 얻어야한다. CITY시애틀과 일치하는 행은 표시되지 않습니다.

지금은 복잡하지는 않지만 실제로는 생각보다 어렵습니다.

SELECT * FROM ADDRESS WHERE 
((NAME LIKE 'Bill%') OR (NAME LIKE 'Seattle%')) 
AND 
((CITY LIKE 'Bill%') OR (CITY LIKE 'Seattle%')) 

이 우리 앞의 경우에서 잘 작동하지만, 우리는 다른 필드를 추가한다고 가정 :이 같은 뭔가 왔어요

SELECT * FROM ADDRESS WHERE 
((NAME LIKE 'Bill%') OR (NAME LIKE 'Seattle%')) 
AND 
((CITY LIKE 'Bill%') OR (CITY LIKE 'Seattle%')) 
AND 
((COMPANY LIKE 'Bill%') OR (COMPANY LIKE 'Seattle%')) 

가 지금은 원하는 결과를 반환하지 않습니다. 내가 essentialy (내 생각)

((COMPANY LIKE 'Bill%') OR (COMPANY LIKE 'Seattle%')) 

반환 뭔가하지 않을 경우 같은 하위 조건, 난 그 조건을 무시해야하는 경우를 결정하는 방법은 무엇이 필요.

Btw, MSSQL '05를 사용 중입니다.

답변

12

우선, 나는 그것이 MSSQL에서 어떻게 이루어 졌는지 모르겠다. 그러나 전체 텍스트 검색을보고 싶을 수도있다. 당신이 아주 잘 이렇게 할 경우, 그것은 매우 힘들 것입니다

SELECT * FROM ADDRESS WHERE 
((NAME LIKE 'Bill%') OR (CITY LIKE 'Bill%') OR (COMPANY LIKE 'Bill%')) 
AND 
((NAME LIKE 'Seattle%') OR (CITY LIKE 'Seattle%') OR (COMPANY LIKE 'Seattle%')) 
+0

감사합니다, 지금 바보 같은 느낌입니다. 결국 꽤 분명했습니다. –

+0

당신을 진심으로 환영합니다. =) –

4

전체 텍스트 인덱싱을 사용하면 포함 된 항목과 필요한 상황에 매우 강력한 Conatainstable을 모두 사용할 수 있습니다.

+0

우리는 모든 것을 출하해야하고 고객 데이터베이스에 액세스 할 필요가 없으므로 전문 검색 기능을 사용할 수 있는지 확신 할 수 없습니다. 그렇지 않으면 사용했을 것입니다. –

0

: 한편

, 이것은 당신이 정말로 무엇을 의미 수 있습니다. 이상적인 세계에서 프로그램은 각 키워드를보고 의미를 결정하여 일치해야하는 열을 결정할 수 있습니다. 그러나 자연 언어 인식이라는 독창성이 필요합니다.

"Bill Seattle"에 대한 검색의 예에서 프로그램은 사람 이름의 일부로 "Bill"을 도시 이름으로 "Seattle"으로 식별해야합니다. 간단히 말해서 모든 알려진 도시의 목록을 작성하고 거기에 키워드를 찾아 도시 이름으로 표시하십시오. 당신은 회사를 위해서도 똑같이 할 수 있습니다. 그런 다음 도시 나 회사처럼 보이지 않는 모든 키워드를 부분적인 사람 이름으로 간주하십시오. 이 분류를 사용하면 SQL 쿼리를 쉽게 작성할 수 있습니다.

그러나 나는 위에서 설명한 것과 같은 간단한 프로세스가 깨지기 쉽다는 것을 확신합니다. 그래서 좀 더 지능적인 파싱 솔루션을 사용하지 않는다면 (OpenCalais 프로젝트에서 아이디어를 얻으려면 the example parser을 확인하십시오.) 쉬운 방법을 권장합니다.

쉬운 방법은 모든 텍스트 필드에 대해 전체 텍스트 검색을 수행하는 것입니다. 귀하의 테이블, 위에서 언급 한 바와 같이 순위에 의해 결과를 주문 - 아마도 좋은 80-20 솔루션입니다.