Potrzebuję zapytania SQLite, które przeszukuje 1 pole tylko używając LIKE.SQLite LIKE & ORDER BY Zapytanie o dopasowanie
Podstawowe przykład:
SELECT name FROM table WHERE name LIKE "%John%" ORDER BY name LIMIT 10;
Problem polega na tym, że chcę wynikiem zamawiane w ten sposób:
- Jeśli pole jest równe (np "Jan")
- Jeśli pole zaczyna się od "John" (np. "John Doe")
- Jeśli pole zawiera "John" (np. "Jane John Doe")
następującego zapytania osiąga się oczekiwany wynik, lecz słaba:
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;
powyżej Zapytanie jest mniejsza (lub I badane nieprawidłowo) niż alternatywy przy użyciu 3 oddzielnych zapytania (jeden dla dokładnego dopasowania, jeden dla zaczyna się od i jeden zawiera).
Czy są jeszcze jakieś alternatywy?