Compte tenu de la table de base de données suivante:Existe-t-il un meilleur moyen de trouver des anagrammes en utilisant SQL?
WORDS
alphagram....varchar(15)
word.........varchar(15) PK
length.......int
Où:
- 'Alphagram' est les lettres d'un mot dans l'ordre alphabétique (par exemple AEINNRTT est le Alphagram de INTRANET)
- la clé primaire est 'mot', et il y a des index sur alphagram et la longueur
J'ai trouvé un moyen de trouver les anagrammes d'une chaîne de lettre donnée s via SQL. Par exemple, pour trouver les anagrammes de AEINNRTT cela fonctionnera:
select alphagram, word, definition
from words
where length = 8
and alphagram like '%A%'
and alphagram like '%E%'
and alphagram like '%I%'
and alphagram like '%NN%'
and alphagram like '%R%'
and alphagram like '%TT%'
qui renverra 1 rang (pour INTRANET)
Et si je voulais inclure un nombre connu de caractères génériques, par exemple, combien de les mots sont avec INTRANET + un blanc (joker) Je dois juste changer la 'longueur' au nombre total de lettres + nombre de jokers
select alphagram, word, definition
from words
where length = 9
and alphagram like '%A%'
and alphagram like '%E%'
and alphagram like '%I%'
and alphagram like '%NN%'
and alphagram like '%R%'
and alphagram like '%TT%'
... sera de retour 8 lignes (Entertain, instanter, intégrantes, intranets, ITINERANT, Nattering, RATTENING et TRANSITOIRE)
Ma question est la suivante: est-il un moyen plus efficace de le faire via SQL seulement?
Cela fonctionne très vite dans SQL Server mais assez lent dans SqlLite. Je réalise que les recherches% xxx% ne sont pas rapides.
Y a-t-il une raison pour laquelle vous utilisez uniquement SQL au lieu d'une couche d'application? – JNK
J'essaie de garder les choses simples, mais je vais probablement avoir cette route. – eponymous23