J'ai besoin d'une requête SQLite qui recherche 1 champ uniquement en utilisant LIKE.SQLite LIKE & ORDER BY Requête de correspondance
exemple de base:
SELECT name FROM table WHERE name LIKE "%John%" ORDER BY name LIMIT 10;
Le problème est que je veux que le résultat à commander de cette manière:
- Si le champ est égal (par exemple, "John")
- Si le champ commence par "John" (par exemple "John Doe")
- Si le champ contient "John" (par exemple "Jane John Doe")
La requête suivante permet d'obtenir le résultat attendu, mais il est lent:
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;
La requête ci-dessus est plus lente (ou je l'ai testé à tort) que la possibilité d'utiliser 3 requêtes distinctes (une pour correspondance exacte, un pour commence par et un pour contient).
Y a-t-il d'autres alternatives?