Ignorant, pour le moment, la partie SQL du problème, l'algorithme que j'utiliserais est assez simple :commencez par prendre chaque mot de votre dictionnaire et produisez-en une version avec les lettres dans l'ordre trié, ainsi qu'un pointeur vers l'arrière à la version originale de ce mot.
Cela donnerait un tableau avec des entrées comme :
sorted_text word_id
act 123 /* we'll assume `act` was word number 123 in the original list */
act 321 /* we'll assume 'cat' was word number 321 in the original list */
Ensuite, lorsque nous recevons une entrée (par exemple, "tac"), nous trions ses lettres, la recherchons dans notre tableau de lettres triées joint au tableau des mots d'origine, et cela nous donne une liste des mots qui peuvent être créés à partir de cette entrée.
Si je faisaient cela, j'aurais les tables pour cela dans une base de données SQL, mais j'utiliserais probablement autre chose pour pré-traiter la liste de mots dans la forme triée. De même, je laisserais probablement le tri des lettres de l'entrée de l'utilisateur à tout ce que j'utilisais pour créer le front-end, de sorte que SQL se chargerait de faire ce pour quoi il est bon :la gestion de bases de données relationnelles.