Om jag för tillfället ignorerar SQL-delen av problemet, är algoritmen jag skulle använda ganska enkel:börja med att ta varje ord i din ordbok och skapa en version av det med bokstäverna i sorterad ordning, tillsammans med en pekare tillbaka till den ursprungliga versionen av det ordet.
Detta skulle ge en tabell med poster som:
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 */
När vi sedan får en inmatning (säg "tac") sorterar vi dess bokstäver, slår upp den i vår tabell med sorterade bokstäver som är sammanfogade med tabellen över de ursprungliga orden, och det ger oss en lista över de ord som kan skapas från den ingången.
Om Jag skulle göra det här skulle jag ha tabellerna för det i en SQL-databas, men förmodligen använda något annat för att förbearbeta ordlistan till den sorterade formen. På samma sätt skulle jag antagligen lämna sorteringen av bokstäverna i användarens inmatning till vad jag än använde för att skapa gränssnittet, så SQL skulle få göra det den är bra på:relationsdatabashantering.