Сортировка результатов, когда автозаполнение соответствует нескольким столбцам в SQL - PullRequest
0 голосов
/ 27 октября 2009

У меня возникла проблема с полем автозаполнения, над которым я работаю. Поле, с которым я работаю, состоит из формы "<NAME> (<CODE>)". Когда пользователь начинает вводить текст, я хочу отобразить любые результаты, которые соответствуют либо NAME, либо CODE.

Например, если этот список содержит элементы и их коды, такие как «Персональный компьютер (ПК)», то я бы хотел, чтобы этот список всплывал в этой строке, если пользователь вводит «P», «ПК», «Per и т. д.

Я получил это, чтобы нормально работать в SQLite с таким запросом:

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

Однако проблема, с которой я сейчас сталкиваюсь, заключается в том, как наилучшим образом отсортировать результаты, полученные из этого. Например, если кто-то вводит «ПК», я хочу, чтобы «Персональный компьютер (ПК)» был первым результатом. Однако, если есть еще один ряд (вам придется смириться со мной, поскольку он придуман) «Корпус ПК (301)», то я не могу упростить порядок результатов, чтобы гарантировать, что лучший матч появляется первым. При заказе по имени и коду сначала возвращается PC Case.

Мне нужен запрос, в котором сначала возвращается наилучшее совпадение, а не элементы в алфавитном порядке. Есть ли такая функция, которую я могу использовать в SQLite, чтобы получить это, или я должен вернуть результаты, а затем связываться с порядком в коде?

Если это поможет, я использую это для FilterQueryProviders на Android.

Ответы [ 2 ]

0 голосов
/ 26 июля 2010

Это много времени спустя, но я решил свою дилемму, не прибегая к безумной тактике сортировки.

По сути, как только автозаполнение становится достаточно сложным, вам нужно реализовать свой собственный CursorAdapter (реализующий FilterQueryProvider), а затем переопределить convertToString (). Таким образом, вы в конечном итоге сможете выполнять сложные запросы с помощью runQuery (), но затем можете преобразовать его в читаемую форму в convertToString ().

0 голосов
/ 28 октября 2009

Да, вы должны реализовать FullTextSearch и использовать MATCH в ваших запросах. Ссылка: http://dotnetperls.com/sqlite-fts3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...