2009-10-27 4 views
0

내가 작업중인 자동 완성 필드에 문제가 발생했습니다. 내가 작업하는 분야는 "<NAME> (<CODE>)" 형태로 구성되어 있습니다. 사용자가 텍스트 입력을 시작하면 NAME 또는 CODE과 일치하는 결과를 표시하려고합니다.자동 완성이 SQL의 여러 열과 일치 할 때 결과 정렬

예를 들어이 목록에 "PC (Personal Computer)"와 같은 항목과 해당 코드가 포함되어있는 경우 사용자가 "P", "PC", " 등 당은 "

I는이 같은 쿼리와 SQLite는에 잘 작동하는 왔 :

SELECT * 
FROM table 
WHERE name LIKE "?%" or code LIKE "?%" 

그러나, 지금 실행 해요 문제가 가장 좋은 결과를 정렬하는 방법입니다 이걸로 돌아와. 예를 들어, 누군가 "PC"를 입력하면, "Personal Computer (PC)"가 첫 번째 결과가되기를 원합니다. 그러나 "PC Case (301)"와 같은 또 다른 행이 있다면, 이 가장 먼저 나타나도록 결과에 간단한 주문이 필요하지 않습니다. 이름과 코드로 주문하면 PC 케이스가 먼저 반환됩니다.

알파벳 순서로 항목이 아닌 가장 먼저 일치하는 항목을 먼저 반환하는 쿼리를 원합니다. SQLite에서이 함수를 사용할 수있는 함수가 있습니까? 아니면 결과를 반환하고 코드의 순서를 엉망으로 사용해야합니까?

도움이된다면 Android 용 FilterQueryProviders에이 기능을 사용하고 있습니다.

+0

FULL TEXT 검색 및 사용 순위로 전환하는 것이 좋습니다. –

답변

0

사실 꽤 오래되었지만 미친 분류 전술에 의존하지 않고도 내 딜레마를 해결했습니다.

기본적으로 자동 완성이 충분히 복잡 해지면 자체 CursorAdapter (FilterQueryProvider 구현)를 구현 한 다음 convertToString()을 재정의해야합니다. 이렇게하면 runQuery()를 통해 복잡한 쿼리를 수행 할 수있게되지만 convertToString()에서 읽을 수있는 형식으로 변환 할 수 있습니다.

0

예. FullTextSearch을 구현하고 MATCH을 사용해야합니다.
Ref : http://dotnetperls.com/sqlite-fts3

+0

정렬 문제이므로 일치하는 문제가 아니기 때문에 이것이 내 상황에 어떻게 도움이되는지 알지 못합니다. –

관련 문제