sql >> Databasteknik >  >> RDS >> Mysql

Word anagrammer med sql's %

Först vill jag korrigera ett fel i din fråga. I dina frågor menar du _ inte % . % betyder valfritt antal tecken (noll eller fler). Använd _ betyder exakt ett tecken.

Nu till lösningen... du behöver faktiskt inte det sorterade ordet lagrat i databasen. Du kan bara göra så här:

SELECT word
FROM dictionary
WHERE CHAR_LENGTH(word) = 6
AND word LIKE '%W%'
AND word LIKE '%O%'
AND word LIKE '%R%'
AND word LIKE '%D%'

Om du har dubbletter av bokstäver i din inmatning måste du hantera detta korrekt för att säkerställa att alla resultat innehåller alla dubblerade bokstäver. Till exempel om indata är FOO__ du måste kontrollera att varje ord matchar båda %F% och %O%O% .

SELECT word
FROM dictionary
WHERE CHAR_LENGTH(word) = 5
AND word LIKE '%F%'
AND word LIKE '%O%O%'

Observera att detta tillvägagångssätt kommer att kräva en fullständig genomsökning av tabellen så det kommer inte att vara särskilt effektivt. Du kan förbättra saker och ting något genom att lagra längden på varje ord i en separat kolumn och indexera den kolumnen.

Om du har sortedword då kan du förbättra prestandan genom att utelämna % mellan dubblerade bokstäver eftersom du vet att de kommer att visas i följd i sortedword . Detta kan förbättra prestandan eftersom det minskar mängden backtracking som krävs för misslyckade matchningar.

SELECT word
FROM dictionary
WHERE CHAR_LENGTH(word) = 5
AND sortedword LIKE '%F%'
AND sortedword LIKE '%OO%'

Ett annat tillvägagångssätt som kräver sortedword att vara närvarande är som följer:

SELECT word
FROM dictionary
WHERE CHAR_LENGTH(word) = 5
AND sortedword LIKE '%D%O%R%W%'

Återigen kräver detta en fullständig genomsökning av tabellen. Återigen, om du har upprepade bokstäver behöver du inte % mellan dem.

SELECT word
FROM dictionary
WHERE CHAR_LENGTH(word) = 5
AND sortedword LIKE '%F%OO%'



  1. pdo för att hämta data och fylla i en post

  2. Hur man beräknar omsättningen varje termin

  3. Hur man infogar JSON i en tabell i SQL Server

  4. okänd databas i jdbc