Я нахожусь в середине создания моего запроса анаграммы, который почти отлично работает. Вот мой sql
Буквы, которые я использую, это «settin?»
Разница заключается в подстановочном знаке, который я позволю пользователю добавить «?» в поле.
SELECT `word`, 0+ABS(`e`-1)+ABS(`i`-1)+ABS(`n`-1)+ABS(`s`-1)+ABS(`t`-2) AS difference
FROM `TWL06`
WHERE LENGTH(`word`) <= 7
HAVING difference <= 1
Моя структура таблицы такая
word | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z |
--------------------------------------------------------------------------------------------------------------
THIS | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
Проблема с запросом заключается в том, что он будет извлекать только слова, которые содержат все буквы с разницей 0 или 1. Он не будет извлекать слова, которые могут быть меньше по длине, которые могут содержать некоторые буквы или более короткие слова, такие как 2 3 4 5 6 букв длиной.
Я думал, что WHERE LENGTH(word
) ‹= 7 позаботится о длине, но, похоже, это не работает.
Например: СИДЕТЬ, ПАЛАТКИ, ТЕСТ
или даже слова с разницей в 1 подстановочный знак, например
TESTY (Y — подстановочный знак)
Любые идеи?
e
-1 вычитает единицу из поля с именем e. - person Marc B   schedule 25.06.2013