SQLite:% midstring% и stringstart% выполняют поиск по нескольким столбцам, но всегда хотят, чтобы сначала всегда возвращались успешные совпадения с stringstart% - PullRequest
1 голос
/ 06 августа 2011

Вот упрощенная версия таблицы, которую я имею:

sometable
title  |  tag   | score
-----------------------
foo1      bar       100
bar2      oobar      50
meh3                 25

В настоящее время, если я хочу выполнить поиск в таблице и иметь oo моим поисковым запросом, я выполню что-то вроде:

SELECT *, (title||" "||tag) AS titletag
FROM sometable WHERE titletag LIKE "%oo%"
ORDER BY score DESC

и приведенное выше вернет строку foo1 первой, а bar2 секунду.

Я хотел бы добавить, что если поисковый запрос (oo) совпадает с началом tag (например, tag LIKE "oo%"), я хочу, чтобы указанные строки были первыми перед любой другой строкой, независимо от того, оценки, но все еще сохраняют оставшуюся часть исходного запроса.

Таким образом, при поиске oo я бы хотел, чтобы строка bar2 возвращалась первой, поскольку oo соответствует началу oobar, а затем foo1 идет вторым, даже если bar2 оценка ниже foo1.

Как мне этого добиться?

Ответы [ 2 ]

1 голос
/ 06 августа 2011

Ответ VMAtm не совсем сработал, но дал мне идею использовать:

SELECT *, (title||" "||tag) AS titletag, score*100 AS newscore
FROM sometable WHERE tag LIKE "oo%"

UNION

SELECT *, (title||" "||tag) AS titletag, score AS newscore
FROM sometable WHERE titletag LIKE "%oo%"

ORDER BY newscore DESC

Таким образом, в первом семестре SELECT совпадающим tag с присваивается гораздо более высокий балл, а во втором семестре SELECT их оценки остаются прежними.

Таким образом, bar2 будет первым с newscore 5000, а foo1 будет вторым, потому что его newscore останется на 100.

1 голос
/ 06 августа 2011

Попробуйте использовать Union:

SELECT *, (title||" "||tag) AS titletag
FROM sometable WHERE titletag LIKE "oo%"

UNION

SELECT *, (title||" "||tag) AS titletag
FROM sometable WHERE titletag LIKE "%oo%"

ORDER BY score DESC

Но вы должны знать о Максимальном количестве терминов в составном операторе SELECT

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