Mysql
 sql >> база данни >  >> RDS >> Mysql

Анаграмист на Word с % на sql

Първо искам да коригирам грешка във вашия въпрос. Във вашите заявки имате предвид _ не % . % означава произволен брой знаци (нула или повече). Използвайте _ означава точно един знак.

Сега към решението... всъщност нямате нужда от сортираната дума, съхранявана в базата данни. Можете просто да направите това:

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%'

Ако имате дублиращи се букви във вашия вход, трябва да се справите правилно с това, за да сте сигурни, че всички резултати съдържат всички дублирани букви. Например, ако входът е FOO__ трябва да проверите дали всяка дума отговаря и на двете %F% и %O%O% .

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

Имайте предвид, че този подход ще изисква пълно сканиране на таблицата, така че няма да бъде особено ефективен. Можете леко да подобрите нещата, като съхраните дължината на всяка дума в отделна колона и индексирате тази колона.

Ако имате sortedword тогава можете да подобрите производителността, като пропуснете % между дублирани букви, тъй като знаете, че те ще се появяват последователно в sortedword . Това може да подобри производителността, тъй като намалява количеството връщане назад, необходимо за неуспешни съвпадения.

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

Друг подход, който изисква sortedword да присъства е както следва:

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

Отново това изисква пълно сканиране на таблицата. Отново, ако имате повтарящи се букви, не се нуждаете от % между тях.

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Отдалечено архивиране с помощта на innobackupex

  2. Проблеми при свързване към mysql сървър:ГРЕШКА 2003 (HY000)

  3. Заявка за избор на низове завършва с определен знак

  4. MySQL получава редове, но предпочита една стойност на колона пред друга

  5. Създайте MySQL база данни с .SQL файл