Мне нужен SQLite-запрос, который ищет 1 поле только с использованием LIKE.
Основной пример:
SELECT name FROM table WHERE name LIKE "%John%" ORDER BY name LIMIT 10;
Проблема заключается в том, что я хочу, чтобы результат упорядочивался таким образом:
- Если поле равно (например, "Джон" )
- Если поле начинается с "John" (например, "John Doe" )
- Если поле содержит "Джон" (например, "Джейн Джон Доу" )
Следующий запрос достигает ожидаемого результата, но медленный:
SELECT name FROM table WHERE name LIKE "%John%" ORDER BY CASE WHEN name = "John"
THEN 1 ELSE 2 END, CASE WHEN name LIKE "John%" THEN 1 ELSE 2 END, name LIMIT 10;
Запрос выше медленнее (или я тестировал его неправильно), чем альтернативу использования 3 отдельных запросов (один для точного соответствия, один для начала и один для содержит).
Есть ли другие альтернативы?